python算法(四)快速排序

python算法(四)快速排序

快速排序

目標(biāo): 將一組亂序的數(shù)列,按從小到大(從大到小)的順序排列.
方法:
快速排序的邏輯是:
先從這一組數(shù)中,隨便找一個(gè)數(shù)作為基準(zhǔn)
然后對(duì)其他的數(shù)進(jìn)行分類(lèi),大于基準(zhǔn)的分成一組,小于基準(zhǔn)的分成一組.
然后對(duì)分好的兩組重新按上面的方法進(jìn)行分組,直到每一個(gè)組只有一個(gè)元素,則排序完成

示意圖:
例題數(shù)組: 1 5 7 3 2 8 6 9
比如,我用7作為基準(zhǔn)
1<7 加入左側(cè), 5<7加入左側(cè), 3<7加入左側(cè),2<7加入左側(cè),8<7加入右側(cè), 6<7加入左側(cè), 9>7加入右側(cè)
第一輪:的結(jié)果
左側(cè):1 5 3 2 6 右側(cè) 8 9 基本7
第二輪: 左側(cè)如果用3作基準(zhǔn), 右側(cè)用 8 作基準(zhǔn)
1<3 加入左側(cè), 5>3 加入右側(cè), 2<3加入左側(cè), 6>3 加入右內(nèi)里
9>8 加入右側(cè),左側(cè)為空
第二輪結(jié)果
左側(cè): 左邊:1 2 右邊: 5 6 基準(zhǔn):3 右側(cè): 左邊[] 右邊: 9 基準(zhǔn):8
第三輪:
1 [] 基準(zhǔn) 2 5 [] 基準(zhǔn) 6
然后加回來(lái):
1 2 5 6 7 8 9

python實(shí)現(xiàn)

# coding: utf-8
# 作者:愛(ài)編程的章老師
# 創(chuàng)建:2021/1/30 10:04 下午 
# 郵箱:slxxf000@163.com
# 微信:slxxfl
# 微信公眾號(hào):A衛(wèi)隆少兒編程
# 格言:給自己的生活增加一份向上的力,每都進(jìn)步一點(diǎn)點(diǎn)

from random import shuffle

"""快速排序算法"""
def quick_sort(num_list: list):
    """num_list:要排序的原始數(shù)列"""
    # 如果要排序的列表只有一個(gè)元素或者沒(méi)有元素,直接返回
    if len(num_list) == 1 or len(num_list) == 0:
        return num_list
    temp = num_list[-1]  # 基準(zhǔn)數(shù)
    left = [] # 左側(cè)列表
    right = [] # 右側(cè)列表

    for i in range(len(num_list) - 1):
        if num_list[i] < temp:
            left.append(num_list[i])
        else:
            right.append(num_list[i])
    left = quick_sort(left)
    right = quick_sort(right)
    return left + [temp] + right  # 將左側(cè)與基準(zhǔn)與右側(cè)重新拼接成最終結(jié)果


# 生成一個(gè)一百個(gè)數(shù)的數(shù)列
num_list_demo = [x for x in range(100)]
# 打亂這個(gè)數(shù)列,形成一個(gè)測(cè)試用例
shuffle(num_list_demo)
print("排序前的數(shù)列:", num_list_demo)
print("排序后的數(shù)列:", quick_sort(num_list_demo))
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 之所以叫快速排序,是因?yàn)榭炫旁趯?shí)際應(yīng)用中是表現(xiàn)最好的排序算法。 快速排序采用分治策略對(duì)數(shù)據(jù)進(jìn)行排序,什么是分治策略...
    JxYoung閱讀 693評(píng)論 0 0
  • ??快速排序(Quick Sort)法和冒泡排序法類(lèi)似,都是基于交換排序思想的??焖倥判?qū)γ芭菖判蚍ㄟM(jìn)行了改進(jìn),從...
    一笑小先生閱讀 440評(píng)論 0 1
  • 本文只是自己的筆記,并不具備過(guò)多的指導(dǎo)意義。為了理解很多都使用了遞歸,而不是自己通過(guò)while進(jìn)行壓棧處理。代碼的...
    kirito_song閱讀 2,779評(píng)論 0 7
  • 在上一篇中,回顧了一下針對(duì)選擇排序的優(yōu)化算法——堆排序。堆排序的時(shí)間復(fù)雜度為O(nlogn),而快速排序的時(shí)間復(fù)雜...
    一葉障目閱讀 119評(píng)論 0 0
  • 目錄 遞歸 快速排序 資料 收獲 一、遞歸 遞歸就是自己調(diào)用自己遞歸遞歸,有遞就要有歸,只遞不歸導(dǎo)致程序崩潰。為了...
    yabin小站閱讀 361評(píng)論 0 0

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