小劉學python 快速排序

2021-10-05 21:14:00 字數 1176 閱讀 2655

快速排序的概念相信大家都很容易理解,下面這個演算法是基於同樣想法的另一種演算法,其中利用到了分割槽。如果實施正確,這是一種非常有效的演算法,在預期的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 將比這個數大的數全都放到它的左邊,比它小的全都放...