快速排序 基本思想是:1.先從數列中取出乙個數作為基準數。
2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3.再對左右區間重複第二步,直到各區間只有乙個數。
def quick_sort(li, start, end):
# 分治: 一分為二
# start=end ,證明要處理的資料只有乙個
# start>end ,證明右邊沒有資料
if start >= end:
return
# 定義兩個游標,分別指向0和末尾位置
left = start
right = end
# 把0位置的資料,認為是中間值
mid = li[left]
while left < right:
# 讓右邊游標往左移動,目的是找到小於mid的值,放到left游標位置
while left < right and li[right] >= mid:
right -= 1
li[left] = li[right]
# 讓左邊游標往右移動,目的是找到大於mid的值,放到right游標位置
while left < right and li[left] < mid:
left += 1
li[right] = li[left]
# while結束後,把mid放到中間位置,left=right
li[left] = mid
# 遞迴處理左邊的資料
quick_sort(li, start, left - 1)
# 遞迴處理右邊的資料
quick_sort(li, left + 1, end)
if __name__ == '__main__':
ls = [2, 3, 5, 1, 4, 6]
# l = 3 [2,1,5,6,5,4]
# [2, 1, 5, 6, 5, 4]
quick_sort(ls, 0, len(ls) - 1)
print(ls)
python的快速排序演算法詳解
def quick sort arr if len arr 2 當資料集長度為1時,結束遞迴 return arr mid arr len arr 2 基準數可以隨便選,我這裡就對2取整了 left,right 申明兩個列表用來儲存左右分區的數 arr.remove mid 將基準數從陣列中移除 f...
詳解python實現快速排序演算法
快速排序嚴重依賴分割槽,分割槽部分完成就代表排序成功了一半 1 詳細思路見 注釋部分 def quick sort l,low,high 分割槽的過程 low代表左指標,high代表右指標 1 low會逐個向右移動,遇到大於或等於基準元素時,停止 2 high會逐個向左移動,遇到小於或等於基準元素時...
快速排序詳解
快速排序也是基於交換的原理進行的,是對氣泡排序的一種改進。即它是通過不斷比較和移動交換來實現排序的,只不過它的實現,增大了記錄的比較和移動的距離,將關鍵字比較大的記錄從前面直接移動到後面,關鍵字較小的記錄從後面直接移動到前面,從而減小了總的比較次數和移動次數。快速排序是找出乙個元素 理論上可以隨便找...