快速排序

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

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

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

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

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容