# -*- coding: utf-8 -*-
"""@file : quick_sort.py
@author: zhang_san
@time : 2020/7/17 18:25
@des :
快速排序:每次選擇乙個pivot,然後以這個pivot為中心,兩邊分別存放比其大或者小的值,依次
迭代進行劃分,最終完成排序
(這裡一定要注意指標滑動的方向,確保頭和尾的數字有被比較到)
"""def partition(arr, start, end):
# 設定乙個中間值,用於比較大小
pivot_index = start
pivot_value = arr[start]
# 利用兩邊滑動的方式,跟middle的值做比較
while start < end:
# 如果右邊的指標所指的數大於pivot,則繼續向左滑動指標,直到遇到乙個大於pivot的值
while arr[end] <= pivot_value and start < end:
end -= 1
# 如果左邊的指標所指的數大於pivot,則繼續向右滑動指標,直到遇到乙個小於pivot的值
while arr[start] >= pivot_value and start < end:
start += 1
# 交換相應位置的值
arr[start], arr[end] = arr[end], arr[start]
arr[start], arr[pivot_index] = arr[pivot_index], arr[start]
return start
def quick_sort(arr, start, end):
if start < end:
middle = partition(arr, start, end)
quick_sort(arr, start, middle - 1)
quick_sort(arr, middle + 1, end)
l = [3, 44, 38, 5, 47, 38, 36, 26, -7, 2, 46, 4, 19, 50]
quick_sort(l, 0, len(l) - 1)
print(l)
[50, 47, 46, 44, 38, 38, 36, 26, 19, 5, 4, 3, 2, -7]
桶排序,氣泡排序,快速排序演算法Python實現
案例 學生分數為0 10,要按照從小到大排序 1.首先我們需要申請乙個大小為10的陣列 python為列表 然後遍歷學生成績,每遍歷乙個成績就在序號 成績的位置 1.2.生成完列表之後,按照序號從小到大遍歷,列印出每個序號,每個序號列印次數是序號下的數值 def bucket sort lst pr...
python排序演算法 三 快速排序
快速排序 iflen data 2 遞迴入口及出口 mid data 0 選取基準值,也可以選取第乙個或最後乙個元素,也可以選擇中間的值 left,right 定義基準值左右兩側的列表 data.remove mid 從原始陣列中移除基準值 for num in data if num mid el...
Python排序演算法之快速排序
從列表中抽取乙個元素p 假定為第乙個 使p歸位,保證左邊的元素都比p小,右邊的元素都比p大。再遞迴呼叫完成排序 最壞情況 o n 2n 2 n2 平均情況 o nlogn 最好情況 o nlogn 最壞情況 o n 平均情況 o logn 不穩定 較複雜 一開始,從列表中隨機抽取乙個數與第乙個元素互...