3.快速排序

在快速排序之前,有一個(gè) D&C 的概念攘烛, 即 divede and conquer(分而治之)舔痕。具體什么意思呢评抚,就是說可以把一個(gè)問題不斷劃分成小問題,如果劃分到最后的小問題很容易解決伯复,那么劃分出來的問題都可以這樣做慨代,從而這個(gè)問題也解決了。

現(xiàn)在的問題是啸如,對(duì)一個(gè)數(shù)組進(jìn)行排序侍匙,可以先想一下,什么情況下數(shù)組不用排序叮雳,要么這個(gè)數(shù)組是一個(gè)空數(shù)組想暗,要么這個(gè)數(shù)組只有一個(gè)數(shù)字妇汗。那什么情況下數(shù)組排序最簡(jiǎn)單呢,就是數(shù)組只含有兩個(gè)數(shù)字说莫,只需要對(duì)這兩個(gè)數(shù)字比較大小杨箭,然后進(jìn)行位置變換就可以了。那么現(xiàn)在小問題的解決方案已經(jīng)有了唬滑,現(xiàn)在要做的就是把不是一下子可以解決的大問題劃分成一下子就可以解決的小問題告唆。

在快速排序時(shí),按照這個(gè)思路晶密,可以先找一個(gè)基準(zhǔn)值擒悬,數(shù)組中比這個(gè)基準(zhǔn)值小的就放在它的左邊,否則放在右邊稻艰。這樣最開始的一個(gè)數(shù)組就變成了一個(gè)基準(zhǔn)值加上比它小的子數(shù)組和比它大的子數(shù)組懂牧,接下來可以對(duì)這兩個(gè)子數(shù)組按照這個(gè)方式繼續(xù)進(jìn)行劃分(遞歸條件),直到最后子數(shù)組中只有一個(gè)數(shù)字為止(基線條件)尊勿。

def quick_sort(array):
    if len(array) < 2:
        return array
    else:
        base_value = array[0]  # 這里選擇第一個(gè)值作為基準(zhǔn)值
        less = [v for v in array[1:] if v <= base_value]
        greater = [v for v in array[1:] if v > base_value]
        return quick_sort(less) + [base_value] + quick_sort(greater)
    
print(quick_sort([1, 3, 6, 2, 5, 4]))

>>>
[1, 2, 3, 4, 5, 6]

這里每次選擇基準(zhǔn)值時(shí)都是把第一個(gè)值作為基準(zhǔn)值僧凤,這樣有一個(gè)壞處就是,如果這個(gè)數(shù)組是升序的元扔,那么遞歸層次最深躯保,效率也最低。這時(shí)候算法的運(yùn)行時(shí)間為 O(n2)澎语。而最好的情況是每次選擇的值都在中間途事,兩邊的子數(shù)組等長(zhǎng),這樣遞歸層次最淺擅羞,算法的運(yùn)行時(shí)間為 O(nlogn)尸变。在使用時(shí),為了使平均運(yùn)行時(shí)間等同于最佳算法時(shí)間减俏,可以使用的方法是每次隨機(jī)取基準(zhǔn)值召烂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市娃承,隨后出現(xiàn)的幾起案子奏夫,更是在濱河造成了極大的恐慌,老刑警劉巖草慧,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桶蛔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漫谷,警方通過查閱死者的電腦和手機(jī)仔雷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碟婆,你說我怎么就攤上這事电抚。” “怎么了竖共?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵蝙叛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我公给,道長(zhǎng)借帘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任淌铐,我火速辦了婚禮肺然,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腿准。我一直安慰自己际起,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布吐葱。 她就那樣靜靜地躺著街望,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弟跑。 梳的紋絲不亂的頭發(fā)上灾前,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音孟辑,去河邊找鬼豫柬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扑浸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燕偶,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼喝噪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了指么?” 一聲冷哼從身側(cè)響起酝惧,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伯诬,沒想到半個(gè)月后晚唇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盗似,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年哩陕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悍及,死狀恐怖闽瓢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情心赶,我是刑警寧澤扣讼,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站缨叫,受9級(jí)特大地震影響椭符,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耻姥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一销钝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咏闪,春花似錦曙搬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至据某,卻和暖如春橡娄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背癣籽。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工挽唉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人筷狼。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓瓶籽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親埂材。 傳聞我的和親對(duì)象是個(gè)殘疾皇子塑顺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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