*快速排序 最優時間復雜度為nlogn,因為要完成n個嵌套調用,,但比冒泡排序要快
python實現邏輯過程是這樣得。
1.設置兩個游標 left跟right
2.設置基準值,網上有方案設置中間數為基準值,但計算比較麻煩,而且并不一定高效,這里設置列表最右的那個元素為基準值,
3.left游標 從左向右移動,當游標指向元素大于基準值時,停下,交換right游標指向的元素
4 同理 right右標向左移動
5 當左右游標相等時停止循環,賦值基準值給左游標指向的元素
6 對基準值左邊的元素遞歸,重復以上步驟,
7 設置條件退出遞歸。
下面是代碼實現
alist= [22,21,34,65,12,89,3,9,66]
def qucik_sort(alist,low, high):
# 退出遞歸條件
# left=right
while low>high:
return alist
left = low
right = high
base_value = alist[right]
while left < right:
while left<right and alist[left] < base_value:
left += 1
# 跳出循環條件
# alist[left]>=base_value
alist[right]=alist[left]
while right>left and alist[right]>base_value:
right -= 1
# 跳出循環條件
# alist[right]<=base_value
alist[left]=alist[right]
# 把基準值賦值給游標停留的元素
alist[right] = base_value
# 繼續對游標左右的隊列遞歸快速排序
qucik_sort(alist,low,left-1)
qucik_sort(alist,left+1,len(alist)-1)
print(alist)
if __name__ == '__main__':
low = 0
high = len(alist)-1
qucik_sort(alist,low,high)
輸出結果為 [3, 9, 12, 21, 22, 34, 65, 66, 89]
簡潔的代碼 ,很pythonic.