气泡排序法 – 算法
顾名思义,就是排序时
最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,将大的元素交换至右端
所以大的元素会不断的往右移动,直到适当的位置为止。
基本的气泡排序法可以利用旗标的方式稍微减少一些比较的时间,当寻访完阵列后都没有发生任何的交换动作,表示排序已经完成,而无需再进行之后的回圈比较与交换动作,例如:
排序前:95 27 90 49 80 58 6 9 18 50
27 90 49 80 58 6 918 50 [95] 95浮出
27 49 80 58 6 9 1850 [90 95] 90浮出
27 49 58 6 9 18 50[80 90 95] 80浮出
27 49 6 9 18 50 [5880 90 95] ......
27 6 9 18 49 [50 5880 90 95] ......
6 9 18 27 [49 50 5880 90 95] ......
6 9 18 [27 49 50 5880 90 95] 由于接下来不会再发生交换动作,排序提早结束
在上面的例子当中,还加入了一个观念,就是当进行至i与i+1时没有交换的动作,表示接下来的i+2至n已经排序完毕,这也增进了气泡排序的效率。
SourceCodes
// 冒泡排序
int BubbleSort(int a[],int lens)
{
int i,j;
for(i=0;i<lens-1;i++)
{
for(j=0;j<lens-1-i;j++)
{
if(a[j]>a[j+1])
{
SWAPER(a[j],a[j+1]);
}
}
}
return 0;
}
int BubbleSort2(int a[],int lens)
{
int i,j;
bool flag=true;
for(i=0;i<lens-1 && flag==true;i++)
{
flag=false;
for(j=0;j<lens-1-i;j++)
{
if(a[j]>a[j+1])
{
SWAPER(a[j],a[j+1]);
flag=true;
}
}
}
return 0;
}