快速排序-python實(shí)現(xiàn)

本文用 python 實(shí)現(xiàn)快速排序。

思路

- 假如有一個(gè)序列 [4, 6, 1, 14, 8],首先要把第一個(gè)數(shù)找到它正確的位置,即它左邊都小于它,右邊均大于它。

1、取出第一個(gè)值 賦值給臨時(shí)變量 target,target = 4 ,取出變量left 記錄左邊下標(biāo),變量 right 記錄右邊下標(biāo)。

1

2、把 target 與 right 下標(biāo)的值進(jìn)行比較,如果 target 小, 則 right += 1,再重復(fù) 2 的操作。反之將 right 下標(biāo)的值賦值給 left 的值,sort_list[left] = sort_list[right],然后left += 1 ,執(zhí)行3。

2

3、把 target 與 right 下標(biāo)的值進(jìn)行比較,如果 target 小, 則 right += 1,再重復(fù) 3 的操作。反之將 right 下標(biāo)的值賦值給 left 的值,sort_list[left] = sort_list[right]

3

4、直到 left == right,把 target 賦值給 sort_list[left] ,這時(shí)左邊的數(shù)小于 target ,右邊的數(shù)大于 target。

4
- 然后把 target 左邊的序列和右邊的序列遞歸執(zhí)行上述操作,直到最后,排序完成

代碼

如下:

def quick_sort(sort_list, start, end):
    if start >= end:
        return
     
    # 記錄兩端下標(biāo)
    left = start
    right = end
    # 取第一個(gè)作為目標(biāo)
    target = sort_list[left]
 
    while left < right:
         
        while left < right and target <= sort_list[right]:
            right -= 1
        sort_list[left] = sort_list[right]
 
        while left < right and sort_list[left] < target:
            left += 1
        sort_list[right] = sort_list[left]
 
    sort_list[left] = target
    # 把target兩邊的序列遞歸執(zhí)行
    quick_sort(sort_list, start, left-1)
    quick_sort(sort_list, left+1, end)
 
 
if __name__ == '__main__':
    sort_list = [4, 6, 1, 14, 8]
    quick_sort(sort_list, 0, len(sort_list) - 1)
    print(sort_list)

快速排序是不穩(wěn)定的,平均時(shí)間復(fù)雜度是 O(nlog2n),最差時(shí)間復(fù)雜度 O(n2)。
----END----

最后編輯于
?著作權(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)容

  • Swift 燒腦體操(一) - Optional 的嵌套 Swift 燒腦體操(二) - 函數(shù)的參數(shù) Swift ...
    Zakerberg閱讀 461評(píng)論 0 0
  • 注意?。。?! 如果你是技術(shù)大牛、技術(shù)大咖,請(qǐng)略過(guò)這篇文章避免耽擱您的時(shí)間,這篇文章屬于入門級(jí)別。?? 1、原型模式的...
    dragonYao閱讀 198評(píng)論 0 0
  • 我問(wèn)佛:我為什么窮?佛:你沒(méi)有學(xué)會(huì)給予。我:我一無(wú)所有如何給予?佛:一個(gè)人即使一無(wú)所有也可以給予別人七種東西——顏...
    維新醫(yī)堂閱讀 426評(píng)論 0 0
  • 兒子今年上一年級(jí),開學(xué)到現(xiàn)在快一個(gè)月了,心里各種焦慮和擔(dān)心。從幼兒園開始就慢慢培養(yǎng)他的一些習(xí)慣,在兒子兩歲的時(shí)候看...
    夏夏家庭教育閱讀 300評(píng)論 1 1
  • 今天語(yǔ)文課學(xué)習(xí)了《語(yǔ)文園地三》,復(fù)習(xí)23個(gè)聲母,24個(gè)韻母和16個(gè)整體認(rèn)讀音節(jié)。 家庭作業(yè): 1.《語(yǔ)文配套練習(xí)冊(cè)...
    賀瑋閱讀 260評(píng)論 0 0

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