python演算法之快速排序

2021-10-02 01:56:20 字數 1139 閱讀 2918

步驟為:

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 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列...