python 快速排序

2021-08-08 18:27:33 字數 766 閱讀 3077

# 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 從開始位置...