快速排序

快速排序算法使用了分治思想。分治是說如果一個比較難的問題不好解決,我們可以嘗試把它分解成若干個簡單的同類子問題,依次求解各個子問題,再將子問題的解組合起來得到原問題的解。
快排的思想是:

  1. 在數據集中找一個元素作為基準值 (pivot), 一般取第一個就行
  2. 所有比基準值小的元素放到基準值的左邊,大于等于基準值的元素放到基準值的右邊
  3. 對左右子集重復上面兩部操作,直到數據集為空或數據集中只剩下一個元素
    如對 6, 2, 8, 3, 12, 7 進行排序
    第一步以 6 作為基準值,分出左右2個子集
    [2, 3] [6] [8, 12, 7]
    左右子集遞歸操作
    [] [2] [3] [6] [7] [8] [12]
    合并結果集
    2 3 6 7 8 12
def quick_sort(l):
    if len(l) <= 1:  # 基線條件:空數組或只有一個元素的數組本來就有序直接返回
        return l

    pivot = l[0]  # 取第一個元素為基準值
    left = [x for x in l[1:] if x < pivot]  # 小于基準值的數放到左邊
    right = [x for x in l[1:] if x >= pivot]  # 大于等于基準值的數放到右邊

    # 對左右子集遞歸調用快速排序,最后將結果集拼接
    return quick_sort(left) + [pivot] + quick_sort(right)

l = [6, 2, 8, 3, 12, 7]
print(l)
l = quick_sort(l)
print(l)

遞歸必須有退出條件,這里退出條件就是空數組或只有一個元素的數組,這兩種情況我們是知道怎么排序的,它們本來就有序。

快速排序是一種不穩定的排序算法
快速排序是最快的排序算法之一,算法平均時間復雜度是 O(nlog(n)), 最壞時間復雜度是 O(n^2)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 版本記錄 前言 將數據結構和算法比作計算機的基石毫不為過,追求程序的高效是每一個軟件工程師的夢想。下面就是我對算法...
    刀客傳奇閱讀 5,193評論 4 72
  • quicksort可以說是應用最廣泛的排序算法之一,它的基本思想是分治法,選擇一個pivot(中軸點),將小于pi...
    黎景陽閱讀 458評論 0 1
  • 注:本文是在看了兩篇大牛的博客后,通過整理供自己學習快速排序所做筆記,分享出來方便大家學習。如需進一步了解可以查看...
    跑者小越閱讀 563評論 0 4
  • 前言 快速排序由于排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經常被采用,再加上快速排序思想--...
    fjytqiu閱讀 2,234評論 0 3
  • 今年我高三畢業。 說“那些年”似乎有些“為賦新詞強說愁的滋味”。但短短三個月,從高考、畢業到開學至今,總有一種...
    mrpg閱讀 121評論 0 1