对于学习算法的同学而言,估计第一个接触的排序算法就是冒泡。其实冒泡算法的本质就是交换,邻居比较之后不停的交换。
举个例子#
现有一数组a,里面有5个元素。a[0]=3,a[1]=4,a[2]=1,a[3]=5,a[4]=2.然后我们希望按照从小到大的顺序排列,我们可以分析一下冒泡排序的过程:
第一遍:
- a[0]<a[1] 不改变 3,4,1,5,2
- a[1]>a[2] 这里要交换一下a[1]与a[2]的位置。结果是:3,1,4,5,2
- a[2]<a[3] 不改变 3,1,4,5,2
- 4.a[3]>a[4] 交换一下a[3]与a[4]的位置。排序后的结果是 3,1,4,2,5
第二遍:
我们从第一遍的可以看出,最大值已经被筛选出来,并且在最右侧。然后我们在第二遍的执行的时候就相当于比较前面的四个元素就可以了。
- a[0]>a[1] 交换位置 1,3,4,2,5
- a[1]<a[2] 不变化
- a[2]>a[3] 交换位置 1,3,2,4,5
第三遍
从第二遍的执行结果可以看书,把4放到了最右侧,所以第三遍仅需要比较前面的三个元素就可以了
- a[0]<a[1]不变化
- a[1]>a[2] 交换位置 1,2,3,4,5
第四遍
a[0]<a[1] 不变化 最终的排序的结果已经得出。
我们从上面的步骤可以看书,冒泡排序的本质就是不停的交换。说了那么多原理,我们用代码来实现一下
实现#
#include <stdio.h>
int main()
{
int i,j,temp,a[5]={3,4,1,5,2};
for(i=1;i<=4;i++)
{
for(j=0;j<5-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=a[j];
}
}
}
for(i=0;i<5;i++)
{
printf("%d",a[i]);
}
return 0;
}
输出的结果也是 1,2,3,4,5
这只是冒泡排序的一种方法,后买几天我们来讲其他的方法。
网友评论