當前位置: 首頁>>算法&結構>>正文


快排序的一種經典寫法【最短的快排序?】

摘要:關於快排序的各種版本的代碼已經有很多了,這裏簡要介紹一種堪稱經典的寫法 

關鍵詞:quicksort 快排序  快排序的經典寫法 最短快排序 源碼

以下是代碼的主要部分,其他部分略去。其中swap用於交換array中兩個元素的位置
random用於產生隨機整數。

在快排序的這一種實現中,我們要注意兩個地方。

其一,swap(low, random(low, high)) 這個statement對支點(pivot)的選擇采用隨機的辦法,可以防止
劃分不勻的惡性循環。

其二,隻使用一個for循環來完成基於支點的交換,這個與很多教科書上的快排源碼使用兩個循環相
比,顯得更為簡潔和優雅。

//二分法,算法時間複雜度為O(n*logn)
void quicksort(int low, int high)
{
    int i, m;
    swap(low, random(low, high));
    m = low;
    for(i = low + 1; i <= high; ++i)
        if(array[i] < array[low])
            swap(++m, i);
    swap(low, m);
    quicksort(low, m - 1);
    quicksort(m + 1, high);
}

參考文獻: 《Beautiful Code》Andy Oram & Greg Wilson

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/70.html,未經允許,請勿轉載。