排序演算法 快速排序Python實現

2021-10-08 09:23:13 字數 1256 閱讀 9411

# -*- 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 不穩定 較複雜 一開始,從列表中隨機抽取乙個數與第乙個元素互...