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