演算法導論學習筆記 第七章 快速排序

2021-05-22 14:55:50 字數 1166 閱讀 7260

第七章

快速排序

總結:這章講了快速排序的演算法,分析了演算法複雜性,又講了快速排序的隨機版

1.

快速排序

partition(a, p, r)

將a[p…r]

進行就地重排,返回

q,其中

a[p…q-1]

中的元素都小於

a[q]

,a[q+1,…r]

中的元素都大於

a[q]

。quicksort(a, p, r)

遞迴排序

分析:最壞情況

o(n^2)

最好情況

o(nlgn)

平均情況

o(n^2)

偽**partition (a, p, r)

x <- a[r]

i <- p-1

for j <- p to r-1

do if a[j]<=x

then i <- i+1

exchange a[i] <-> a[j]

exchange a[i+1] <-> a[r]

return i+1

quicksort(a, p, r)

if p < r

then q <- partion(a, p, r)

quicksort(a, p, q-1)

quicksort(a, q+1, r)

2.

快速排序的隨機版

引入了隨機演算法,在

partition

中不用a[r]

做主元,而是從子陣列

a[p…r]

中隨機選擇乙個元素作為主元。

分析:最壞情況

o(n^2)

最好情況

o(nlgn)

平均情況

o(n^2)

偽**randomized-partition(a, p, r)

i <- random(p, r)

exchange a[i] <-> a[r]

return partition(a, p, r)

演算法導論 第七章《快速排序》

本章介紹了快速排序及其演算法分析,快速排序採用的是分治演算法思想,對包含n個數的輸入陣列,最壞情況下執行時間為 n 2 但是平均效能相當好,期望的執行時間為 nlgn 另外快速排序能夠就地排序 我理解是不需要引入額外的輔助空間,每次劃分能確定乙個元素的具體位置 在虛擬環境中能很好的工作。快速排序演算...

演算法導論 第七章 快速排序

快速排序通常是實際應用中最好的選擇,因為它的平均效能非常好,它的期望時間複雜度為o nlng 而且隱含的常數因子非常小。另外,它還是原址排序。quicksort a,p,r if p隨著程式的執行,陣列被劃分為4個 小於主元,大於主元,未劃分,主元,可能有空的 區域。對於partition中的第3 ...

演算法導論第七章快速排序

一 快速排序概述 關於快速排序,我之前寫過兩篇文章,一篇是寫vc庫中的快排函式,另一篇是寫了快排的三種實現方法。現在再一次看演算法導論,發現對快速排序又有了些新的認識,總結如下 1 快速排序最壞情況下的時間複雜度為o n 2 雖然最壞情況下效能較差,但快排在實際應用中是最佳選擇。原因在於 其平均效能...