演算法之 快速排序

2022-05-06 06:06:07 字數 1116 閱讀 7786

先放一段python 跑跑

本段只說遞迴方式的:

l = [5, 2, 0, 7, 3, 8, 9, 4, 2, 1]

defquick_sort(l, low, hight):

i =low

j =hight

if i >=j:

return

l key =l[low]

while i#

本l的左右拆分整理

while iand key <=l[j]:

j-=1l[i] =l[j]

#i=i+1 # 錯誤, 因為 i=j的時候,while 不迴圈,但是 i=i+1產生了***

while iand key >=l[i]:

i+=1l[j] =l[i]

#j = j-1

l[i] =key

quick_sort(l, low, i-1) #

left sort

quick_sort(l, j+1, hight) #

right sort

returnl

quick_sort(l, 0, len(l)-1)

描述, 首選選擇第乙個數作為key基礎,將l拆分成右邊大於key,左邊小於key

第乙個l[i]數取出來做key,此時i的位置空出來留給 從右邊開始遍歷到的第乙個小於key的數;

找到該數j後, j的數值放到i上,j空出來了,從i向右遍歷,找出第乙個大於key的數來填充j;

i=j 以後,說明我們描述工作完成了, 後面在對左右兩邊進行 相同的整理; 

不穩定,因為左右兩邊的位置會經常互換

如果陣列已經有序時,此時的分割就是乙個非常不好的分割。因為每次劃分只能使待排序序列減一,此時為最壞情況,快速排序淪為氣泡排序,時間複雜度為θ(n^2)。

平均時間複雜度:儘管快速排序的最壞時間為o(n^2 ), 但就平均效能而言,它是基於關鍵字比較的內部排序演算法中速度最快的,快速排序亦因此而得名。它的平均時間複雜度為o(n×lgn)。

空間複雜度:快速排序在系統內部需要乙個棧來實現遞迴。若每次劃分較為均勻,則其遞迴樹的高度為o(lgn), 故遞迴後所需棧空間為o(lgn) 。最壞情況下,遞迴樹的高度為o(n), 所需的棧空間為o(n) 。

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

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

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

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

排序演算法之快速排序

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