1. 程式人生 > >起泡排序(Bubble sort)

起泡排序(Bubble sort)

ima true pre img 提前 順序 標誌位 技術 swap

局部有序和整體有序

在由一組整數組成的序列A[0, n-1]中,滿足 $ A[i - 1] \leq A[i] $ 的相鄰元素稱為順序的;否則是逆序的。

掃描交換

由有序序列的特征,我們可以通過不斷改善局部的有序性實現整體的有序性:從前向後依次檢查每一對相鄰元素,一旦發現逆序即交換二者的位置。對於長度為n的序列,共需做n-1次比較,和不超過n-1次交換,這一過程稱為一趟掃描交換。
技術分享圖片

起泡排序

void bubblesort(int A[], int n)
{
    bool sorted = false; // 整體排序標誌,先假定未排序
    while(!sorted)
    {
        sorted = true; // 假定已排序
        for(int i = 1; i < n; i++)
        {
            if(A[i-1] > A[i])
            {
                swap(A[i-1], A[i]); // 逆序交換
                sorted = false; // 出現逆序,所以整體排序為false
            }
        }
        
        n--; // 末元素已就位,可縮短待排序序列長度
    }
} // 借助bool型標誌位sorted,可及時提前退出,而不用總是蠻力地做n-1趟掃描交換

起泡排序(Bubble sort)