快速排序(Python版)--個(gè)人理解寫(xiě)到詳細(xì)注釋中

  • 深入理解算法中‘分割’的概念瘟斜。
  • 在序列變換中巧妙使用‘空位’, 使代碼變得美觀
  • 推薦每個(gè)程序員可以在十分鐘內(nèi)寫(xiě)完如下代碼
  • 面試前寄症,先寫(xiě)個(gè)快排
  • 在入門(mén)一個(gè)新的程序語(yǔ)言時(shí),不妨先寫(xiě)個(gè)快排練練
# Quick Sort 
# 選取一個(gè)Key 
# 對(duì)比: 將比Key小的放到左邊萍恕,比Key大的放到右邊
# 循環(huán): 直至每個(gè)元素都與key對(duì)比過(guò)了
# 遞歸: key左側(cè)的和key右側(cè)的分別遞歸

list = [5,7,1,8,4]
count = len(list)
def quickSort(L, low, high):
    print('\nquickSort: ', L, low, high)
    i = low 
    j = high
    if i >= j:
        return L
    # 為了序列調(diào)位方便 在序列中挖出一個(gè)空位
    # 此時(shí)空位 序列中i的位置
    key = L[i] 
    while i < j:
        while i < j and L[j] >= key: # 遍歷key右側(cè)的值
            j = j-1                  # 若不小于key厅须,j向左挪一個(gè) 
        # 此時(shí)序列中的空位為L(zhǎng)[i]椿猎,賦值后變?yōu)長(zhǎng)[j]
        L[i] = L[j]   #此時(shí)j指向的值小于key, 將其賦給i指向的位置(i值在key 值的左側(cè))
        while i < j and L[i] <= key: #遍歷key左側(cè)的值
            i = i+1                  # 若不大于key, i 向右挪一個(gè)
        # 此時(shí)序列中的空位為L(zhǎng)[j], 賦值后變?yōu)長(zhǎng)[i]
        L[j] = L[i]   #此時(shí)i 指向的值大于key,將其值賦給(空位)
        print(L, i, j)
        # 每循環(huán)一次調(diào)整序列中的兩個(gè)值
        # key右側(cè)的一個(gè)值和key左側(cè)的一個(gè)值
        # 不斷循環(huán)直到i = j示损,即key左側(cè)的均小于key渗磅,右側(cè)的均大于key
    # 此時(shí)i = j , 將key值放入空位中   
    L[i] = key 
    quickSort(L, low, i-1)
    quickSort(L, j+1, high)
    return L 

quickSort(list,0,count-1)

無(wú)注釋版

def quick_sort(lists, left, right):
    # 快速排序
    if left >= right:
        return lists
    key = lists[left]
    low = left
    high = right
    while left < right:
        while left < right and lists[right] >= key:
            right -= 1
        lists[left] = lists[right]
        while left < right and lists[left] <= key:
            left += 1
        lists[right] = lists[left]
    lists[right] = key
    quick_sort(lists, low, left - 1)
    quick_sort(lists, left + 1, high)
    return lists

一行版---- 利用序列切片

import numpy as np
# 生成隨機(jī)序列
randomList = np.random.randint(500,size=100)
print(randomList)

def qsort(numbers):
    if len(numbers) == 0: return []
    else: return qsort([i for i in numbers[1:] if i <= numbers[0]]) + [numbers[0]] + qsort([i for i in numbers[1:] if i > numbers[0]])

qsort(randomList)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末检访,一起剝皮案震驚了整個(gè)濱河市始鱼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脆贵,老刑警劉巖医清,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異卖氨,居然都是意外死亡会烙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)筒捺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柏腻,“玉大人,你說(shuō)我怎么就攤上這事系吭『危” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵村斟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我抛猫,道長(zhǎng)蟆盹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任闺金,我火速辦了婚禮逾滥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己寨昙,他們只是感情好讥巡,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著舔哪,像睡著了一般欢顷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捉蚤,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天抬驴,我揣著相機(jī)與錄音,去河邊找鬼缆巧。 笑死布持,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陕悬。 我是一名探鬼主播题暖,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捉超!你這毒婦竟也來(lái)了胧卤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狂秦,失蹤者是張志新(化名)和其女友劉穎灌侣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體裂问,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侧啼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堪簿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痊乾。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖椭更,靈堂內(nèi)的尸體忽然破棺而出哪审,到底是詐尸還是另有隱情,我是刑警寧澤虑瀑,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布湿滓,位于F島的核電站,受9級(jí)特大地震影響舌狗,放射性物質(zhì)發(fā)生泄漏叽奥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一痛侍、第九天 我趴在偏房一處隱蔽的房頂上張望朝氓。 院中可真熱鬧,春花似錦、人聲如沸赵哲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)枫夺。三九已至将宪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筷屡,已是汗流浹背涧偷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毙死,地道東北人燎潮。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像扼倘,于是被迫代替她去往敵國(guó)和親确封。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,334評(píng)論 25 707
  • 今日分享 極簡(jiǎn)主義者產(chǎn)生的條件再菊,主要是有三個(gè): 1.泛濫的信息和物質(zhì) 打開(kāi)手機(jī)爪喘,可以了解到各種信息,信息量爆炸式增...
    雪23閱讀 114評(píng)論 0 0
  • 哈嘍大家好.我是林森.今天我給大家分享的是社群營(yíng)銷(xiāo)纠拔! 從2013年至今秉剑,投身微商的行業(yè)的人數(shù)愈2000萬(wàn),微商形勢(shì)...
    艾麗森閱讀 366評(píng)論 0 0
  • 隨著年紀(jì)的增長(zhǎng)略水,并且由于工作的原因,近來(lái)劝萤,我越來(lái)越認(rèn)識(shí)到擁有一副健康的體魄是多么重要渊涝。25歲,年輕床嫌,可是感覺(jué)突然要...
    清空Q閱讀 402評(píng)論 0 0
  • 有時(shí)候還上的空氣可新鮮啦跨释,我有時(shí)候還在海面上拿上。我的救生圈我每次都在海面上游泳厌处。我不知道為什么煤傍?我都還不知道還可...
    謝運(yùn)生閱讀 222評(píng)論 0 0