快速排序演算法

2021-07-04 12:23:32 字數 811 閱讀 9317

快速排序是一種排序演算法,對包含n個數的輸入陣列,最壞情況執行時間為θ(n2)。雖然這個最壞情況執行時間比較差,但快速排序通常是用於排序的最佳實用選擇,這是因為其平均效能相當好,期望的執行時間為θ(nlgn),且其還能實現就地排序,不需要額外的儲存空間。

快速排序的思想是:將陣列a[p..r]劃分成兩個(可能空)子陣列a[p..q-1]和a[q+1..r],使得a[p..q-1]中的每個元素都小於等於a[q],而且,小於等於a[q+1..r]中的每個元素,下標q是在子陣列劃分過程中計算出來的,然後通過遞迴呼叫快速排序,對子陣列a[p..q-1]和a[q+1..r]進行排序。

偽**如下:

quicksort(a,p,r)

if pthen q=partition(a,p,r)

quicksort(a,p,q-1)

quicksort(a,q+1,r)

陣列劃分的偽**如下:

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

if i!=j

swap(a[i],a[j])

swap(a[i+1], a[r])

return i+1

這裡取第r位元素作為主元,i當前遍歷過程中,最後乙個小於等於主元的元素的位置,j當前遍歷的位置,如果當前j位置的元素小於等於主元,那麼我們將該元素和當前最後乙個小於等於主元的下乙個元素進行替換,也就是說將小於等於主元的元素往前整,將大於主元的元素往後移,使這兩類元素各自連成一片,以達到以主元來劃分子陣列的目的,如下圖,

排序演算法 快速排序演算法

網際網路的大型公司還在火熱招聘中,參與了一次又一次的筆試,都不通過,我還是太菜!作為程式設計人員,需要邁過去 資料結構與演算法 這個坎,畢竟,筆試不會真的很虧,加油吧,少些水,多點實操。一 快速排序演算法思想 從一組資料中找出乙個基準值,一般是選擇中間值作為基準值,然後從左到右將值與基準值進行比較,...

演算法 排序演算法 快速排序

快速排序是對冒泡法排序的一種改進。快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以...

演算法設計 快速排序 隨機快速排序演算法

1.演算法流程 快速排序的時間複雜性分析 1.最壞情況劃分 當劃分產生的兩個子問題分別包含了n 1個元素和0個元素時,快速排序是最壞情況,假如每次遞迴呼叫,總是出現最不平衡劃分,這是最不平衡劃分。劃分操作時間複雜度為 n 則演算法執行時間的遞迴表示式為t n t n 1 t 0 n 利用代入法可以求...