本文摘自《深入浅出数据结构》
解释
从头到尾比较相邻的两个元素,将小的换到前面,大的换到后面。
经过了从头到尾的一趟比较,最大的元素被交换到了最后一个位置,这个过程被称为一趟起泡。
一般来讲,n个元素的冒泡排序需要n-1次起泡,但如果在一次起泡过程中没有发生任何数据交换,
则说明这批数据中的相邻元素都满足前面小,后面大的次序,也就是这批数据是已经排好序了,
就没有必要再进行以后的起泡了,排序可以结束。
void bubbleSort(int a[],int size)
{
int i,j;
int tmp;
bool flag;
for(i=1;i<size;i++)
{
flag=false;
for(j=0;j<size-i;j++)
{
if(a[j+1]<a[j])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
flag=true;
}
}
if(!flag)
break;
}
}
当原始序列有序时,冒泡排序出现最好的情况,此时只要一次排序,时间复杂度O(N)
当原始序列逆序时,冒泡排序要n-1次排序,所以时间复杂度为O(N2)
由此可见,冒泡排序适合那种原始数据本来就比较有序的局面,
冒泡排序时稳定的排序方法