步驟為:
1、從數列中挑出乙個元素,稱為"基準"(pivot),
2、重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽結束之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。
3、遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
li = [84,36,21,14,72,31,98,46,58]
def quick_sort(li, start, end):
"""快速排序"""
# 遞迴的退出條件
if start >= end:
return
# 設定起始元素為要尋找位置的基準元素
mid = li[start]
# low為序列左邊的由左向右移動的游標
low = start
# high為序列右邊的由右向左移動的游標
high = end
while low < high:
# 如果low與high未重合,high指向的元素不比基準元素小,則high向左移動
while low < high and li[high] >= mid:
high -= 1
# 將high指向的元素放到low的位置上
li[low] = li[high]
# 如果low與high未重合,low指向的元素比基準元素小,則low向右移動
while low < high and li[low] < mid:
low += 1
# 將low指向的元素放到high的位置上
li[high] = li[low]
# 退出迴圈後,low與high重合,此時所指位置為基準元素的正確位置
# 將基準元素放到該位置
li[low] = mid
# 對基準元素左邊的子串行進行快速排序
quick_sort(li, start, low-1)
# 對基準元素右邊的子串行進行快速排序
quick_sort(li, low+1, end)
quick_sort(li,0,len(li)-1)
print(li)
Python排序演算法之快速排序
從列表中抽取乙個元素p 假定為第乙個 使p歸位,保證左邊的元素都比p小,右邊的元素都比p大。再遞迴呼叫完成排序 最壞情況 o n 2n 2 n2 平均情況 o nlogn 最好情況 o nlogn 最壞情況 o n 平均情況 o logn 不穩定 較複雜 一開始,從列表中隨機抽取乙個數與第乙個元素互...
Python排序演算法之快速排序
快排的思想 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key...
python演算法之快速排序
快速排序 英語 quicksort 又稱劃分交換排序 partition exchange sort 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列...