快速排序的概念相信大家都很容易理解,下面這個演算法是基於同樣想法的另一種演算法,其中利用到了分割槽。如果實施正確,這是一種非常有效的演算法,在預期的o(nlog n) 時間內執行,乘法常數非常低,大約為2。
import numpy as np
defswap
(data, i, j)
: data[i]
, data[j]
= data[j]
, data[i]
defqsort3
(data, left, right)
:# sorted
if left >= right:
return
# select pivot
i = np.random.randint(left, right +1)
swap(data, left, i)
pivot = data[left]
# i ~ points behind left partition
# j ~ points ahead of right partition
# k ~ current element
i, j, k = left, right, left +
1# split to [left] + [pivot] + [right]
while k <= j:
if data[k]
< pivot:
swap(data, i, k)
i +=
1elif data[k]
> pivot:
swap(data, j, k)
j -=
1 k -=
1 k +=
1# recursion
qsort3(data, left, i -1)
qsort3(data, j +
1, right)
defqsort
(data)
: qsort3(data,0,
len(data)-1
)
測試:
qsort(data)
print
(data)
學python(9) 快速排序
第一種 快速排序 defkp ls 判斷要操作的列表長度是否大於1 if len ls 1 如果列表只有乙個數,則直接返回列表 return ls 定義兩個列表儲存相對較大的數和相對較小的數 maxa mina 這次選擇用第乙個數作為分割標準 遍歷除了第乙個資料的列表 for i in ls 1 判...
python快速排序排序 python快速排序
import random def rand n for i in range n yield random.randint 0,1000 建立乙個隨機數列表 def createlist n lists for i in rand n return lists 挖坑法快速排序 def quick ...
阿布學排序之快速排序
package quicksort 快速排序是一種劃分交換排序,採用了分治策略,時間複雜度為o nlogn 總共需要logn次選取基準數,整個是乙個樹結構,每一層的複雜度是o n 所以總共是o nlogn 思想 1 先從數列中取出乙個數作為基準數 2 將比這個數大的數全都放到它的左邊,比它小的全都放...