作者:学到牛牛龚晓潺
冒泡排序是相对于其他排序来说较简单的排序,也是入门级排序,在一个要排序的序列里面,从前往后进行多次扫描,每两个相邻的数据进行比对,小的放在前面,大的放在后面(升序),多次重复此操作,直到变成一个有序的序列,那它名字的冒泡是从何而来呢,其实就是每两个数据进行比对时,大的那个数因为交换就会像泡泡一样浮起来浮到顶端。
知道了冒泡排序的概念之后,我们再来仔细的看看它的每个步骤
首先,定义一个数组,先从前往后扫描一次,完成第一次的排序,我们最终要呈现一个升序的数组,所以排序的过程中就应该小的数放前面,大的数放后面。
如图1-1所示,定义两个变量(inti,intj),充当内外两层循环的变量,首先从下标为0的数开始(j=0),遍历完最后一个数结束第一次排序(jlen-i-1),
遍历的过程中相邻的两个数进行比较(a[j]a[j+1]),如果前一个数大于后一个数,则两个数交换位置(怎么交换?借助第三个数),如果前一个数小于后一个数,则位置不变,继续后面的相邻的数的比较,直到最后一个数进行比较后结束第一轮。
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
图1-1
(若出稿请在素材中更换此图,删除本句话)
如图1-2所示,我们开始第二轮的排序(i=1),继续相邻的数进行比较,重复第一轮排序的操作
图1-2
内层循环(j)继续相邻两个数的比较,当外层循环遍历到最后一个数(ilen),结束所有的排序,冒泡排序结束。
以上是冒泡排序的基本步骤,其实通过这些步骤可以看出来冒泡排序是思想比较简单的排序,既然简单肯定还是有很多考虑不周全的地方,所以冒泡排序也是所有排序中效率较低的排序,适合初学者使用。接下来我们看看冒泡排序怎么通过程序实现
#includestdio.h
intmain()
{
inta[5]={1,3,2,5,4};intlen=5;inti,j,temp;for(i=0;ilen;i++)//外循环{for(j=0;jlen-i-1;j++)//内循环{if(a[j]a[j+1])//升序,保持前一个数小于后一个数的顺序{temp=a[j];//交换位置a[j]=a[j+1];a[j+1]=temp;}}}for(i=0;ilen;i++){for(j=0;jlen;j++);printf(“a=%d\n”,a[j]);}}