與歸併排序一樣,也使用了分治思想
quick-sort(a, p, r)
if p < r
q = partition(a, p, r)
quick-sort(a, p, q-1)
quick-sort(a, q+1, r)
演算法的關鍵部分是partition過程,它實現了對子陣列a[p..r]的原址重排。
partition總是選擇乙個x=a[r]作為主元,並圍繞它來劃分子陣列a[p..r]。隨著程式的執行,陣列被劃分成4個區域。
partition(a, p, r)
x = a[r]
i = p - 1
for j = p to r - 1
ifa[j] <= x
i = i + 1
exchange a[i] width a[j]
exchange a[i+1] with a[r]
return i + 1
快速排序的執行時間依賴於劃分是否平衡,而平衡與否又依賴於用於劃分的元素。劃分平衡與歸併排序效能一樣,否則,其效能接近於插入排序
快速排序的平均執行時間更接近於其最好情況,而非最壞情況。
隨機從子陣列a[p..r]中隨機選擇乙個元素作為主元。為達到這一目的,首先將a[r]與從a[p..r]中隨機選出的乙個元素交換。
randomized-partition(a, p, r)
i = random(p, r)
exchange a[r] with a[i]
return partition(a, p, r)
randomized-quick
-sort(a, p, r)
if p < r
q = randomized-partition(a, p, r)
randomized-quick
-sort(a, p, q-
1) randomized-quick
-sort(a, q+
1, r)
《演算法導論》讀書筆記 快速排序
快速排序是最壞情況時間複雜度為o n 最優時間複雜度為o nlgn 平均時間複雜度為o nlgn 最壞情況出現在每一層劃分子問題時,分別包含了n 1個元素和0個元素,此時的時間複雜度為o n 與插入排序相同 在陣列已經有序時其時間複雜度依舊為o n 此時插入排序的時間複雜度為o n 快速排序使用了分...
演算法導論讀書筆記(7) 目錄
快速排序的隨機化版本 比較排序 快速排序是一種原地排序演算法,對包含 n 個數的輸入陣列,最壞情況執行時間為 n2 雖然這個最壞情況執行時間比較差,但快速排序通常是用於排序的最佳的實用選擇。這是因為其平均效能相當好 期望的執行時間為 n lg n 且 n lg n 記號中隱含的常數因子很小。像合併排...
演算法導論 讀書筆記 排序演算法總結
排序演算法目錄 1.插入排序 2.歸併排序 3.堆排序 4.快速排序 5.計數排序 6.基數排序 7.桶排序 一.插入排序 1.第乙個元素認為已經排好序了 2.從第二個元素開始考慮,考慮第j個元素 3.從後往前比較,前面數大於第j個元素,則往後挪乙個位置 4.挪到數小於第j個元素,或者挪完,此時因為...