冒泡排序

冒泡排序(bubble sort)又称起泡排序。它主要基于以下观察:

  • 有序序列中,任意一对相邻元素顺序
  • 无序序列中,总有一对相邻元素逆序

为此,要执行扫描交换,即依次比较每一对相邻元素,如有必要,交换之;若整趟扫描都没有进行交换,则排序完成;否则,再做一趟扫描交换。

Python 实现:

C 实现:

void bubblesort(int A[], int n)
{
    for(bool sorted = false; sorted = !sorted; n--)  // 逐趟扫描交换,直至完全有序
    {
        for(int i = 1; i < n; i++)  // 自左向右,逐对检查A[0, n)内各相邻元素
        {
            if(A[i-1] > A[i])  // 若逆序,则
            {
                swap(A[i-1], A[i]);  // 令其互换,同时
                sorted = false;  // 清除(全局)有序标志
            }
        }
    }
}

冒泡排序是稳定的排序,这是因为,在冒泡排序中,元素 a 和 b 的相对位置发生变化,只有一种可能:经分别与其他元素的交换,二者相互接近直至相邻,在接下来一轮扫描交换中,二者因逆序而交换位置。