python簡潔程式碼實現快速排序
阿新 • • 發佈:2018-12-23
**快速排序 最優時間複雜度為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.