摘要:關於快排序的各種版本的代碼已經有很多了,這裏簡要介紹一種堪稱經典的寫法
關鍵詞: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