演算法之快速排序

2022-01-19 11:59:36 字數 662 閱讀 7932

這裡簡單的介紹下快速排序的偽**實現和示意圖:

quicksort(a,p,r)

if p

q=partition(a,p,r)

quicksort(a,p,q-1

) quciksort(a,q+1,r)

演算法的關鍵部位為partition函式的實現,它實現了對陣列a(p,r)的原址排序:

partition(a,p,r)

x=a[r]

i=p-1

for j=p to r-1

if a[j]<=x

i=i+1

exchange a[i] with a[j]

exchange a[i+1

] with a[r]

return i+1

示意圖:

深層的數學公式介紹在此略過,最差情況下的,快速排序為o(n2) 但是用隨機數可以有效的避免陷入這種情況。另外可以證明就算是每次排序有10%的概率下不處於最差情況,那麼也可以計算出它最終的演算法複雜度為o(nlogn) ,所以快速排序是一種很高效的演算法,平均情況並歸併排序快約三倍左右。

詳細證明參見:

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

很受打擊啊啊啊啊啊!這道排序題我很久之前就做過,而且當時沒用20分鐘就搞定了,可是,今天在公司做完手上的活之後打算刷題時,又心血來潮的想重做一遍,心想反正也花不了多少時間,結果。血崩了。要求 對於乙個int陣列,請編寫乙個快速排序演算法,對陣列元素排序。給定乙個int陣列a及陣列的大小n,請返回排序...

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

快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 nlogn 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 nlogn 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實現出來。快速排序...

排序演算法之快速排序

快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出...