使用python理解快速排序演算法

2021-08-13 23:13:26 字數 1167 閱讀 3932

快速排序是一種常用的優雅的排序演算法,快速排序使用的是「分而治之」的策略。

具體「分而治之」策略這裡不作記錄。

快速排序的原理就是,每次排序,我們選擇乙個基準值α,然後把所有大於這個基準值α的值放到後面生成列表,把小於(等於)基準值α的值放到前面,生成乙個列表,然後使用遞迴將每一層問題逐級解決。

假設有若干個數5,3,6,9,8,4,2

我們以第乙個數5作為第一次排序的基準值,把所有小於基準值5的數字放到5前面,生成乙個列表,同理把 所有大於基準值5的數字放到5的後面生成乙個列表,那麼排序後的結果就是

[3,4,2] [ 5] [6,9,8]

然後5的位置就固定了,然後再排序前後兩個列表,分別以兩個列表的第乙個值3和6為基準值

[2] [3] [4] [5] [6] [9,8]

這次排序過後,2,3,4,5,6都已經是位數是1的列表,無需排序,只要在排列[9,8]就可以了,本次同樣使用[9,8]的第乙個值9為基準值

[2] [3] [4] [5] [6] [8] [9]

排序完成,可以看到7個數,我們使用3次排序就完成了排序,每次排序的規則也是一樣的,我們可以寫成乙個遞迴來排序

直接上**:

def

quick_sort

(array):

if len(array) < 2: # 退出遞迴條件,列表元素數量為1時

return array

else:

pivot = array[0] # 選擇列表的第乙個值為基準值

less = [i for i in array[1:] if i <= pivot] # 把所有小於基準值得元素組合成乙個列表

greater = [i for i in array[1:] if i> pivot] # 把所有大於基準值得元素組合成乙個列表

return quiksort(less) + [pivot] +quiksort(greater) # 遞迴排序

num = [5,9,2,9,3,6,56,41,21,23,10,80,90,10,54,1]

new_num = quick_sort(num)

print(new_num)

[1, 2, 3, 5, 6, 9, 9, 10, 10, 21, 23, 41, 54, 56, 80, 90]

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

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

快速排序算方法

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

快速排序的個人理解 python

快排作為面試過程中的常考題,有必要好好整理以下。快排與我前面寫的歸併排序一樣,都採用了分治策略。但是它不使用額外的儲存空間,不過代價是,列表有可能不會一分為二 這個我們留到後面演算法分析時具體說一下 快排原理 首先選定乙個基準值,基準值的作用就是幫助列表進行切分。也就是將該基準值作為列表的分割點,分...