冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中的气泡最终会上浮到顶端一样,故名“冒泡排序”。
一、基本思想:
相邻的两个元素进行比较,按照要求进行交换。
升序:从小到大
降序:从大到小
二、实现思路(以升序为例)
第一趟排序:
第一个元素和第二个元素进行比较,将较大的放在第二个位置上,然后第二个元素再个第三个元素进行比较,将较大的放在第三个位置上,依此类推,直到第一趟排序完成,最大的元素就在最后一个位置上了。
第二趟排序:
第一个元素和第二个元素进行比较,将较大的放在第二个位置上,然后第二个元素再个第三个元素进行比较,将较大的放在第三个位置上,依此类推,直到第二趟排序完成,第二大的元素就在倒数第二个位置上了。
依此类推,直到整个数据有序。
三、代码详解
int main()
{
int a[10] = {33, 22, 11, 44, 55, 66, 88, 99, 77, 10};
int i, k, w;
for (i = 0; i < (10-1); i++) //外层循环控制排序的次数,此处的-1是
//因为最后一趟只有一个元素,不用比较了
{
for (k = 0; k < (10-1) - i; k++) //此处的-1是为了防止越界,
//此处的-i是因为每趟都可以少比较一个元素
{
if (a[k] > a[k + 1]) //如果是降序 就将此处的 > 改成 < 即可
{
w = a[k];
a[k] = a[k + 1];
a[k + 1] = w;
}
}
}
for (i = 0; i < 10; i++) //排序后打印
{
printf("%d ", a[i]);
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)