如何在冒泡排序算法中获得相反的顺序

How to get the reverse order in BubbleSort Algorithm

我正在研究这段代码,它使用 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        = 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;