说到排序,可能会让很多人感到头疼,今天来给大家分享一下著名的八大排序算法之一——冒泡排序。
例:先随机给定一组无序数,如{3,2,5,9,4,7,1,6,8},通过冒泡排序,将它们变成一组升序的有序序列。
分析如下:(1)将无序数存放在数组中。
(2)从第一个数开始,与相邻的下一项进行比较,如果比下一项大,则交换它们的位置。
(3)重复如上操作,直至变成升序的有序序列。
模拟排序过程:
原序列: 3 2 5 9 4 7 1 6 8
第一轮排序:2 3 5 4 7 1 6 8 9 比较了8次 9已排出
第二轮排序:2 3 4 5 1 6 7 8 9 比较了7次 8已排出
第三轮排序:2 3 4 1 5 6 7 8 9 比较了6次 7已排出
第四轮排序:2 3 1 4 5 6 7 8 9 比较了5次 6已排出
第五轮排序:2 1 3 4 5 6 7 8 9 比较了4次 5已排出
第六轮排序:1 2 3 4 5 6 7 8 9 比较了3次 4已排出
第七轮排序:1 2 3 4 5 6 7 8 9 比较了2次 3已排出
第八轮排序:1 2 3 4 5 6 7 8 9 比较了1次 2已排出
总结:通过上述规律,我们不难发现,如果有n个数,我们每一轮将最大的一个数找出放在序列尾部,不再参与排序,最终需要进行n-1轮方可完成排序,而每次内部的数与相邻的数比较的次数也在逐次递减,但不难发现:每一轮内部数字需要比较的次数与比较的轮数之和为总个数n。
根据以上结论,得到程序如下:
#include<stdio.h>
#include<stdlib.h>
//冒泡排序
int popSort(int a[],int n)
{
for(int i=0;i<n-1;i++) //外层循环,控制循环的轮数
{
int temp;
for(int j=0;j<n-1-i;j++) //内层循环,控制每次内部数之间比较的次数
{
if(a[j]>a[j+1])
{
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
}
int main(void)
{
int a[9]={3,2,5,9,4,7,1,6,8};
popSort(a,7);
printf("冒泡排序后的结果为:");
for(int i=0;i<9;i++)
{
printf("%3d",a[i]);
}
}希望我的例子能给大家学习冒泡排序带来帮助!
八大排序之冒泡排序
最新推荐文章于 2023-11-12 22:01:38 发布