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