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