演算法導論讀書筆記(7)快速排序

2021-08-01 00:01:36 字數 1218 閱讀 6248

與歸併排序一樣,也使用了分治思想

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個元素,或者挪完,此時因為...