冒泡排序(BubbleSort)的基本思想是:将相邻的记录的关键码进行比较,若前面记录的关键码大于后面记录的关键码,则将它们交换,否则不交换。
设待排序的顺序表sqList中有n个记录,冒泡排序要进行n-1趟,每趟循环均是从最后两个记录开始。第1趟循环到第2个记录的关键码与第1个记录的关键码比较后终止,第2趟循环到第3个记录的关键码与第2个记录的关键码比较结束后终止。一般地,第i趟循环到第i+1个记录的关键码与第i个记录的关键码比较后终止,所以,第n-1趟循环到第n个记录的关键码与第n-1个记录的关键码比较后终止。
public void BubbleSort(SeqList<int> sqList)
{
int tmp;
for (int i = 0; i < sqList.Last; ++i)
{
for (int j = sqList.Last - 1; j >= i; --j)
{
if (sqList[j + 1] < sqList[j])
{
tmp = sqList[j + 1];
sqList[j + 1] = sqList[j];
sqList[j] = tmp;
}
}
}
}
冒泡排序算法的最好情况是记录已全部排好序,这时,循环n-1次,每次循环都因没有数据交换而退出。因此,冒泡排序算法在最好情况下的时间复杂度为O(n)。冒泡排序算法的最坏情况是记录全部逆序存放,这时,循环n-1次,总比较次数为
总的移动次数为比较次数的3倍,因为被进行一次比较,需要进行3次移动。因此,冒泡排序算法在最坏情况下的时间复杂度为O(n2)。
冒泡排序算法只需要一个辅助空间用于交换记录,所以,冒泡排序算法是一种稳定的排序方法。