python實現快速排序 quick sort

2021-09-10 12:31:38 字數 1478 閱讀 8928

快速排序(quick sort),又稱劃分交換排序(partition-exchange sort),通過一輪取乙個元素作為中間值,將要排序的資料分割成兩部分,其中一部分的所有資料都比這個中間值都要小,另外一部分的所有資料都比這個中間值要大,然後再次按此方法依次對這兩部分資料分別再次進行快速排序,注意在對各部分資料再次快排的期間是遞進進行的哦!整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

具體步驟為:

從數列中挑出乙個元素(習慣取第乙個),稱為"基準"(pivot)或將其作為當前的中間值(mid_value),

重新排序數列,所有元素比中間值小的擺放在中間值前面,所有元素比中間值大的擺在中間值的後面(相同的數可以到任一邊)。在這個分割槽結束之後,該中間值(或叫基準)就處於當前這組資料的中間位置。這個稱為分割槽(partition)操作。

遞迴地(recursive)把小於中間值元素的子數列和大於中間值元素的子數列再排序。

**實現:

def quick_sort(alist, start, end):

# 定義遞迴退出的條件

if start >= end:

return

# 定義這一輪排序時,分別從兩端逼近的指標和當前輪次的中間值(基準值)

low = start

high = end

mid_value = alist[start]

# 開始排序咯

while low < high: # 這裡千萬要注意,如果mid_value取的是左起第乙個元素,那麼開始遞進的時候一定要從另一頭high開始第一步遞進!!!否則會造成元素丟失

while low < high and alist[high] > mid_value:

high -= 1

alist[low] = alist[high]

while low < high and alist[low] <= mid_value:

low += 1

alist[high] = alist[low]

alist[low] = mid_value # 把這組資料中在排序時被覆蓋掉的基準值再賦回去

# 再次步入迴圈遞進的過程

quick_sort(alist, start, low-1)

quick_sort(alist, low+1, end)

測試:

if __name__ == "__main__":

li = [54, 26, 93, 17, 77, 31, 44, 55, 20]

print(li)

quick_sort(li, 0, len(li)-1)

print(li)

執行一下:

[54, 26, 93, 17, 77, 31, 44, 55, 20]

[17, 20, 26, 31, 44, 54, 55, 77, 93]

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