快速排序python實現

2021-10-04 03:32:41 字數 1804 閱讀 2354

快速排序的思路是依據乙個中值資料項來吧資料表分成兩半:小於中值的一半和大於中值的一半,然後每部分分別進行快速排序(遞迴)

遞迴三要素

基本結束條件:資料表僅有1個資料項

縮小規模:根據中值,將資料表分為兩半,最好情況是相等規模的兩半

呼叫自身:將兩半分別呼叫自身進行排序(排序基本操作在**過程中)

繼續移動,直到左標移到右標的右側,停止移動

這時右標所指位置就是中值應處的位置

將中值和這個位置交換

**完成,左半部分比中值小,右半部分比中值大

def

quicksort

(alist)

: quicksorthelper(alist,0,

len(alist)-1

)def

quicksorthelper

(alist, first, last)

:# 基本結束條件

if first < last:

# **

splitpoint = partition(alist, first, last)

# 遞迴呼叫

quicksorthelper(alist, first, splitpoint -1)

# 前半部分

quicksorthelper(alist, splitpoint +

1, last)

# 後半部分

defpartition

(alist, first, last)

: pivotvalue = alist[first]

# 選定中值

# 左右標初值

leftmark = first +

1 rightmark = last

done =

false

while

not done:

# 向右移動左標

while leftmark <= rightmark and alist[leftmark]

<= pivotvalue:

leftmark = leftmark +

1# 向左移動右標

while rightmark >= leftmark and alist[rightmark]

>= pivotvalue:

rightmark = rightmark -

1if rightmark < leftmark:

# 兩標相錯,結束移動

done =

true

else

:# 左右標的值交換

temp = alist[leftmark]

alist[leftmark]

= alist[rightmark]

alist[rightmark]

= temp

# 中值就位

temp = alist[first]

alist[first]

= alist[rightmark]

alist[rightmark]

= temp

return rightmark # 中值點,也是**點

alist =[54

,26,93

,17,77

,31,44

,55,20

]quicksort(alist)

print

(alist)

python實現快速排序

快速排序的思想是任意選取要排序的list中的乙個數pivot,每次遞迴時將list按照 小於pivot的,pivot,大於pivot的 排序,再對小於和大於pivot部分分別快速排序。function quicksort list select a pivot foreach x in list i...

Python實現快速排序

快速排序的思路 numlist 6,8,1,4,3,9,5,4,11,2,2,15,6 1 設 keys 又稱為監視哨 等於 numlist 0 i等於0 j等於len numlist 1,即如下 numlist 6,8,1,4,3,9,5,4,11,2,2,15,6 keys 6 i 0 j2 1...

python實現快速排序

coding utf 8 實現對列表中的數進行快速排序 importrandom 隨機生成乙個有1000整數的列表 number random.randint 1 1000 foriinrange 1000 列印原始列表 printnumber 單個列表快速排序函式 返回一次排序後的列表和所選取基數...