# quick sort
defquicksort
(l, low, high):
i = low
j = high
if i >= j:
return
key = l[i]
while i < j:
while i < j and l[j] >= key: # 從後向前找比key小的值
j-=1
l[i] = l[j] # 把比key小的值移到key在的位置
while i < j and l[i] <= key: # 從前向後找比key大的值
i+=1
l[j] = l[i] # 把比key大的值移到剛找出的比key小的值的位置
l[i] = key # 這時的i左右分別為比key小和大的值,key移到i處
quicksort(l, low, i-1) # 繼續排前一部分
quicksort(l, j+1, high) # 繼續排後一部分
return
a = [4, 5, 3, 12, 43, 1, 0, 34]
quicksort(a, 0, len(a) - 1)
print(a)
[0, 1, 3, 4, 5, 12, 34, 43]
最好:key每次都能使序列均勻劃分,時間複雜度為o(nlogn)
最壞:key為最大或最小數字,時間複雜度為o(n^2)
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 ...
排序 快速排序 Python
快速排序 快排 是非常常用的排序方法,在技術面試中出現頻率也特別高。它主要採用交換和分治的策略進行排序。是不穩定排序。步驟 1 在序列中選乙個元素作為劃分的基準元素 pivot 2 將所有不大於pivot的數字放在pivot的前面,大於pivot的數字放在pivot的後面 3 以pivot為界,對前...
python快速排序
coding utf 8 class quicksort def sort self,list,left,right 開始位置小於 位置 if left 取到中間的乙個下標值 s list left right 2 i 0 i left j 下標結束 j right while true 從開始位置...