冒泡排序算法的关键是每次循环把最大的数放到最后一个位置,算法的时间复杂度为o(n^2).在下面的算法中,
用到了一个变量b_done,它用来监督一趟比较下来,有没有发生交换,如果没有产生交换,说明原始的数据
是已经排好序的,j就不用再增加了,整个算法结束。
#include "stdafx.h"
void bubble_sort(int list[], int n)
{
int i;
int j;
int tmp;
bool b_done;
b_done = false;
j = 1;
while ((j<n) && (!b_done))
{
b_done = true;
for (i=0; i<n-j; i++)
{
if (list[i] > list[i+1])
{
b_done = false;
tmp = list[i];
list[i] = list[i+1];
list[i+1] = tmp;
}
}
j++;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int test [] = {2,3,6,5,9,8,7,1,4};
bubble_sort(test, 9);
for (int i=0; i<9; i++)
{
printf("%d", test[i]);
}
return 0;
}
本文介绍了一种经典的排序算法——冒泡排序,并详细解释了其工作原理。通过使用一个布尔变量来跟踪是否发生了元素交换,该算法能有效地检测到已排序的情况从而提前终止,避免不必要的比较。文中提供了一个具体的C语言实现示例。
1490

被折叠的 条评论
为什么被折叠?



