快速排序是一種常用的優雅的排序演算法,快速排序使用的是「分而治之」的策略。
具體「分而治之」策略這裡不作記錄。
快速排序的原理就是,每次排序,我們選擇乙個基準值α,然後把所有大於這個基準值α的值放到後面生成列表,把小於(等於)基準值α的值放到前面,生成乙個列表,然後使用遞迴將每一層問題逐級解決。
假設有若干個數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
快排作為面試過程中的常考題,有必要好好整理以下。快排與我前面寫的歸併排序一樣,都採用了分治策略。但是它不使用額外的儲存空間,不過代價是,列表有可能不會一分為二 這個我們留到後面演算法分析時具體說一下 快排原理 首先選定乙個基準值,基準值的作用就是幫助列表進行切分。也就是將該基準值作為列表的分割點,分...