快速排序嚴重依賴分割槽,分割槽部分完成就代表排序成功了一半
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...