詳解python實現快速排序演算法

2021-10-10 03:51:44 字數 1240 閱讀 4239

快速排序嚴重依賴分割槽,分割槽部分完成就代表排序成功了一半

1、詳細思路見**注釋部分:

def quick_sort(l,low,high):

'''分割槽的過程:

low代表左指標,high代表右指標

1、low會逐個向右移動,遇到大於或等於基準元素時,停止

2、high會逐個向左移動,遇到小於或等於基準元素時,停止

3、然後將兩指標所指的元素進行交換

4、重複上述步驟,直到兩指標重合,或者左指標在右指標的右邊

5、最後將軸與左指標的值交換位置

分割槽的目的:

使基準元素到正確的位置,然後再把基準元素左右兩部分分別進行排序

'''if low >= high: # 當分出的子列表長度為0或1時,就不會再遞迴下去了

return

pivot = l[high] # 設定初始的基準元素

inital_low = low # 將初始的low和high儲存一下

inital_high = high

while low < high: # 步驟4

while l[low]pivot: # 步驟2

high -= 1

l[low], l[high] = l[high], l[low] #步驟3

l[low],pivot = pivot,l[low] # 步驟5

'''分割槽後,將基準元素左右兩部分分別進行排序

當分出的子列表長度為0或1時,就不會再遞迴下去了

'''quick_sort(l, inital_low, low-1) #基準左邊部分

quick_sort(l, low+1, inital_high) #基準右邊部分

return l

if __name__=='__main__':

l = [0,5,2,1,6,3]

print(quick_sort(l, 0, len(l)-1))

2、效率分析

①分割槽步驟中,主要包含

②因為等分發生了log n次,而每次都要對總共n個元素做分割槽,所以總步數為n×log n。

因此快速排序演算法最佳時間複雜度和平均時間複雜度均為o(n

logn

)\color

o(nlog

n)最佳情況是在基準元素每次都在子列表的中間

最壞情況是o(n^2)

由於快速排序在平均情況下表現優異,於是很多程式語言自帶的排序函式都採用它來實現。

python快速排序的原理 理解快速排序演算法

快速排序的時間複雜度為o nlogn 空間複雜度為o n 根據 張小牛 的文章快速排序 quick sort 詳解,證明最優的排序演算法,其時間複雜度可為o nlogn 對應的空間複雜度可為o n 快速排序可實現理論最優效率,這可能是快速排序比較重要的原因吧。我們基於python學習寫一下快速排序吧...

python 快速排序詳解

快速排序 基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。def quick sort li,start,end 分治 一分為二 start end 證明要處理的資料只有...

快速排序算方法

快速排序演算法的原理 在待排序的n個記錄中任取乙個記錄 通常取第乙個記錄 為分割槽標準,把所有小於該排序碼的記錄移到左邊,把所有大於該排序碼的記錄移到右邊,中間放所選記錄,稱之為一趟排序 然後,對前後兩個子串行分別重複上述過程。繼續下去,知道所有記錄都排好序。演算法 標頭檔案定義結構體 1 ifnd...