quick sort原理很簡單,典型的分治法:
1,分陣列a一分為二,比元素x小或等的子陣列和比元素x大的陣列
2,遞迴
子陣列遞迴分
3,合子陣列分好以後按序合併即可
用ruby和erlang實現quick sort實在簡潔:
ruby:
def quick_sort(a)
(x=a.pop) ? quick_sort(a.select) + [x] + quick_sort(a.select) :
end
erlang:
quick_sort() ->
;quick_sort([h | t]) ->
quick_sort([ x || x <- t, x < h ]) ++ [h] ++ quick_sort([ x || x <- t, x >= h ]).
最壞時間複雜度為o(n^2):
如果每次分的時候選取的元素都是最小或最大值,那麼分完以後就會出現一邊為空一邊為除了選取元素外所有元素的陣列,複雜度為1+2+...+n = o(n^2)
最好時間複雜度為θ(nlogn):
如果每次分的時候選取的元素都是中間值,那麼分完以後兩邊的陣列size一樣大:
t(n) = 2t(n/2) + θ(n) = θ(nlogn)
7 快速排序
快速排序 快速排序是在實際中最常用的一種排序演算法,速度快,效率高。就像名字一樣,快速排序是最優秀的一種排序演算法。思想 快速排序採用的思想是分治思想。portition 快速排序是找出乙個元素 理論上可以隨便找乙個 作為基準 pivot 然後對陣列進行分割槽操作,使基準左邊元素的值都不大於基準值,...
CLRS 7 3快速排序的隨機化版本
7.3 1 在隨機化演算法下,最壞執行時間不會由乙個特定的輸入產生,而且也不能控制它重複產生,因此我們並不關心它。7.3 2 最壞情況下 t n t n 1 1 n 最好情況下 t n 2 t n 2 1 n 附上隨機化演算法 include include using std cout using...
演算法導論讀書筆記(7)快速排序
與歸併排序一樣,也使用了分治思想 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總是選...