冒泡排序(相邻比序法)是一种简单的交换类排序方法,它是通过对相邻的数据元素进行交换,逐步将待排序序列变成有序序列的过程。
算法思想
反复扫描待排序记录序列,在扫描的过程中顺次比较相邻的两个元素的大小,若逆序就交换位置。
//对记录数组r做冒泡排序,n为数组的长度
void bubbleSort(int r[],int n)
{
change=true;
for(i=1;i<=n-1&&change;i++)
{
change=false;
for(j=1;j<=n-i;j++)
if(r[j]>r[j+1])
{
x=r[j];
r[j]=r[j+1];
r[j+1]=x;
change=true;
}
}
}
注意:数组下标从1到n。
算法分析
冒泡排序算法的最坏情况是待排序记录按关键字逆序排列,此时,第i趟冒泡排序需进行n-i次比较,3(n-i)次移动。经过n-1趟排序后,总的比较次数为n(n-1)/2
总的移动次数为3n(n-1)/2次,因此该算法的时间复杂度为O(n2),空间复杂度为O(1).另外,冒泡排序法是一种稳定的排序方法。