【发布时间】:2017-04-11 08:59:48
【问题描述】:
我目前正在用 C 语言创建这个程序,其目的是使用冒泡排序算法对包含多个元素的静态数组进行排序。冒泡排序可能不是一种快速有效的算法,但我将它用于教育目的。
这个程序几乎按照我想要的方式工作,它正在排序,但我遇到了以下问题:
- 即使数组本身已完全排序,我的 do-while 循环也会不断重复。现在它永远循环,我希望它在整个数组正确排序时停止。
如何判断整个数组是否已排序,完全排序后停止迭代?
这是我的代码:
#include <stdio.h>
int main()
{
int list[] = {5,1,5,4,3,2,1};
int length = sizeof(list) / sizeof(int);
printf("Unsorted array\n");
printf("-----------------------------\n\n");
for (int i = 0; i < length; i++)
{
if (i < length - 1)
printf("%d, ", list[i]);
else
printf("%d", list[i]);
}
do
{
for (int i = 0; i < length - 1; i++)
{
if (list[i] > list[i + 1])
{
printf("\n* Moving %d and %d", list[i], list[i + 1]);
int temp = list[i + 1];
list[i + 1] = list[i];
list[i] = temp;
}
else
{
getchar();
}
getchar();
}
printf("-----------------------------\n");
for (int i = 0; i < length; i++)
{
if (i < length - 1)
printf("%d, ", list[i]);
else
printf("%d", list[i]);
}
} while (1);
printf("Goodbye!\n");
getchar();
return 0;
}
【问题讨论】:
-
en.wikipedia.org/wiki/Bubble_sort 解释了如何知道何时终止。
标签: c arrays algorithm sorting