【问题标题】:How to get the reverse order in BubbleSort Algorithm如何在冒泡排序算法中获得相反的顺序
【发布时间】:2021-06-10 12:29:49
【问题描述】:

我正在研究这段代码,它使用 BubbleSort 来获取相反的顺序(从高到低)或已插入程序中的随机 20 个数据。 结果应该是result (high to low) : 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

但是,我得到的是1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

我知道如果我将if (data[j] < data[j - 1]) 更改为if (data[j] > data[j - 1]),我就能得到正确的答案。

但是,我想问一下是否有任何其他方法可以更改以下代码以使其给我相反的顺序

temp        = data[j];
data[j]     = data[j - 1];
data[j - 1] = temp;

整个代码如下:

#include <stdio.h>
#define COUNT 20
 
int main()
{
    int data[COUNT]
        = { 5 , 15 , 7 , 20 , 1 ,
            4 , 10 , 2 , 8  , 11,
            9 ,  6 , 13, 18 ,  3,
            16, 12 , 14, 17 , 19 };
 
    int temp = 0;
    
    printf("random data : ");
    for (int i = 0; i < COUNT; i++)
    {
        printf("%d ", data[i]);
    }
 
 
    //BubbleSort
    for (int i = 0; i < COUNT - 1; i++)
    {
        for (int j = COUNT - 1; j > i; j--)
        {
            if (data[j] < data[j - 1])
            {
                temp        = data[j];
                data[j]     = data[j - 1];
                data[j - 1] = temp;
            }
        }
    }
 
    //print
    printf("\n\nresult (high to low) : ");
    for (int i = 0; i < COUNT; i++)
    {
        printf("%d ", data[i]);
    }
 
    return 0;
  }

【问题讨论】:

  • 并非如此。任何排序算法的基础都是数组的两个元素之间的比较结果。将比较从 &lt; 更改为 &gt; 是更改产品排序的唯一真正方法。
  • 是的。其中之一是在排序后反转数组。这可以通过将指定部分更改为... temp; }}} /* code to reverse the array here */ {{{来实现
  • 请注意,C 标准 qsort() 采用函数指针进行比较并调用它来比较元素。它可以用来封装奇特的排序顺序,例如“奇数值先下降再偶数值升序”。它还允许您对不同的排序使用单个排序功能。

标签: c bubble-sort


【解决方案1】:

一种方法是反转条件。这可以通过更改指定部分来归档

temp        = data[j];
data[j]     = data[j - 1];
data[j - 1] = temp;

} else {
temp        = data[j];
data[j]     = data[j - 1];
data[j - 1] = temp;

另一种方法是在排序后反转数组。这可以通过更改指定部分来归档

temp        = data[j];
data[j]     = data[j - 1];
data[j - 1] = temp;

temp        = data[j];
data[j]     = data[j - 1];
data[j - 1] = temp;
}}}
for (int i = 0; i < COUNT - i - 1; i++) {{{
temp = data[i];
data[i] = data[COUNT - i - 1];
data[COUNT - i - 1] = temp;

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 2013-09-04
    • 2013-11-02
    • 2013-12-10
    • 2016-11-01
    • 2018-08-11
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多