Python實現快速排序

2021-10-10 01:48:18 字數 1899 閱讀 3601

排序原理

1、設定乙個分界值(陣列最開始的數,切分後就是切分後陣列的第乙個數)

2、將大於等於分界值的數放到右邊,小於分界值的放到左邊

3、然後對左側的陣列和右側的陣列在繼續分成左右兩個部分

class

quick

:def

__init__

(self)

:super

(quick, self)

.__init__(

) @staticmethod

defsort

(a):

quick.quick(a,0,

len(a)-1

) @staticmethod

defquick

(a, start, end)

:if start >= end:

return

partition = quick.partition(a, start, end)

quick.quick(a, partition, end)

quick.quick(a, start, partition-1)

@staticmethod

defpartition

(a, start, end)

:# 快速排序的核心

mid = start

p1 = start +

1 p2 = end

while

true

:# 比較mid(分界值索引)和p1處的大小, mid 比 p1 大就繼續迴圈,否則break

while quick.compare(a, mid, p1)

:# print(p1)

if p1 == end:

break

p1 +=

1# 比較mid(分界值索引)和p1處的大小, mid 比 p2小就繼續迴圈,否則break

while quick.compare(a, p2, mid)

:if p2 == start:

break

p2 -=

1# 如果p2 > p1 就交換位置,(注意是p1和p2交換位置)

if p2 > p1:

quick.exchange(a, p1, p2)

else

:break

# print(p1, p2)

# 到這一步,說明p1,p2 已經碰頭了,p2和p1 已經將值都遍歷了,沒有大於mid的值,將mid 和 p2 交換位置,切分陣列

quick.exchange(a, start, p2)

return p1

@staticmethod

defexchange

(a, i, j)

: temp = a[i]

a[i]

= a[j]

a[j]

= temp

@staticmethod

defcompare

(a, i, j)

:if a[i]

>= a[j]

:return

true

return

false

if __name__ ==

'__main__'

: quick = quick(

) t =[1

,3,2

,4,0

,6,5

,7,123,1

,25,3

,123,5

,5,2

,3,5

,9,12

,34,231,32

,12,23

] quick.sort(t)

print

(t)

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 單個列表快速排序函式 返回一次排序後的列表和所選取基數...