同志们,首先要明白C里的冒泡不是金鱼吐泡泡。。。
它是一种C语言思想,下面我来简单介绍一下。
冒泡排序的思想:
相邻元素两两比较,将较大的数字放在后面,直到将所有数字全部排序
你可以脑补幼儿园的三个同学比身高,分别是小F、小S和小Q。
你可能会说,这一眼就能看出来,比个啥?
举例解决问题,别抬杠。。
冒泡排序怎么比?
(冒泡排序为升序排列,数值大的(长得高的)往后排)
- 小F和小S先比,小F长得高,排后面;
(小S、小F、小Q) - 小F再和小Q比,还是小F高,依然排后面;
(小S、小Q、小F)
第一轮比较结束了,但是并不一定是最终的结果。(敲黑板,划重点)
因为小S和小Q还没有比较,所以还需要再比较。
也就是说,比较n-1次肯定能得出结果(n是元素的个数,上个 “小F、小S、小Q” 的例子当中,n=3)
举个栗子~
用冒泡排序法给数组中的元素排序,a[10]={1,5,7,2,3,9,4,0,6,8};
代码:
#include<stdio.h>
int main(){
int i,j;
int temp;
int a[10]={1,5,7,2,3,9,4,0,6,8};
for(i=0;i<10-1;i++){//外循环的次数(比较n-1次肯定能得出结果)
for(j=0;j<10-1-i;j++){//内循环的次数(相邻两个数的比较次数)
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<10;++i){//输出数组
printf("%d\t",a[i]);}
return 0;
}
运行结果: