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