如何在冒泡排序算法中获得相反的顺序
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;
我正在研究这段代码,它使用 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;