算法小專欄:“D&C思想”與“快速排序”

級(jí)別: ★☆☆☆☆
標(biāo)簽:「算法」「D&C」「quickSort」
作者: MrLiuQ
審校: QiShare團(tuán)隊(duì)


前一篇介紹了遞歸與尾遞歸捂龄,本篇將基于遞歸介紹快速排序等相關(guān)內(nèi)容光绕。

閱讀本文你將收獲:

  • 分而治之思想:簡(jiǎn)稱D&C谱秽,一種遞歸式解決問題方案咧最。
  • 快速排序:利用D&C思想于未,實(shí)現(xiàn)的一種高效排序方法莱褒。

一、“分而治之”思想(D&C)

分而治之:(divide and conquer做盅,D&C)是一種著名的遞歸式解決問題的方法乖杠。

某一種解決問題的算法用處有限萝毛,而D&C為我們提供的是一種思路。
當(dāng)我們面對(duì)一個(gè)復(fù)雜問題手足無措時(shí)滑黔,我們應(yīng)該自問:“D&C能解決該問題么?”

那么环揽,D&C是什么略荡?

1.1 什么是D&C?

使用D&C解決問題的過程分為兩個(gè)步驟:

  1. 找出基線條件歉胶,這個(gè)條件盡可能簡(jiǎn)單汛兜。(基線條件的定義見上篇
  2. 不斷將問題分解(縮小規(guī)模),直到全部符合基線條件通今。

1.2 D&C的實(shí)例

場(chǎng)景:假設(shè)你是一位農(nóng)場(chǎng)主粥谬,你有一塊長方形(168m x 64m)的地。

問題:現(xiàn)在你需要把這塊地分成若干個(gè)正方形的地(方便管理和種菜)辫塌,問最大能拆分成多大的小正方形漏策。(注意:不能留空地哦,最大利用土地資源)

  • 方案一:找出“長”和“寬”中臼氨,相同的最大的公約數(shù)即可掺喻。(我的第一反應(yīng)是這樣算)

  • 方案二:使用D&C思想,先從大長方形中去掉幾個(gè)最大的正方形储矩,再去掉小長方形的幾個(gè)最大正方形感耙,不斷尋找,直到?jīng)]有小長方形為止持隧。

步驟:

  1. 找到基線條件:長是寬的整數(shù)倍
  2. 不斷分解:去除所有最大正方形后即硼,對(duì)小長方形進(jìn)行分解

圖解如圖:

第一次:找到兩個(gè)邊長為64m的大正方形,去除后屡拨,留下64m x 40m的小長方形只酥。

第二次:找到一個(gè)邊長為40m的小正方形褥实,去除后,留下40m x 24m的小長方形层皱。

第三次:找到一個(gè)邊長為24m的小正方形性锭,去除后,留下24m x 16m的小長方形叫胖。

第四次:找到一個(gè)邊長為16m的小正方形草冈,取出后,留下16m x 8m的小長方形瓮增。

第五次:找到兩個(gè)邊長為8m的小正方形怎棱,正好分完。

因此绷跑,該農(nóng)場(chǎng)分為小正方形田地的最大邊長為8m拳恋。

而這個(gè)解決問題的思想,就是D&C思想砸捏。

我們?cè)賮砘仡櫼幌翫&C思想的核心:

  • 找出簡(jiǎn)單的基線條件谬运。
  • 確定如何縮小問題的規(guī)模,使其符合基線條件垦藏。

二梆暖、快速排序

快速排序(QuickSort)利用的就是D&C思想。它是一種高效的排序方案掂骏。

2.1 快排的思想(基于D&C)

  • 基線條件:當(dāng)排序數(shù)組元素個(gè)數(shù)小于2個(gè)時(shí)轰驳,直接返回。
  • 縮小規(guī)模:每次從待排序數(shù)組中選取一個(gè)元素(基準(zhǔn)值)弟灼,把小于等于該元素的元素放在一側(cè)级解,把大于該元素的元素放在另一側(cè)。再對(duì)兩邊的小數(shù)組做重復(fù)操作田绑。

2.2 快排的示例

基于Python勤哗,實(shí)現(xiàn)了一個(gè)快排:
代碼如下:

def quickSort(arr):
    if len(arr) < 2:
        return arr
    else:
        pivot = arr[0]
        less = [i for i in arr[1:] if i <= pivot]
        greater = [i for i in arr[1:] if i > pivot]

        return quickSort(less) + [pivot] + quickSort(greater)

print quickSort([10, 2, 6, 4, 7, 2])

解讀一下代碼:

PS:基準(zhǔn)值一般可以選取第一個(gè)元素,也可以選擇最后一個(gè)元素掩驱。

2.3 快排的動(dòng)畫演示

本Demo中俺陋,選取的數(shù)組的最后一個(gè)元素為基準(zhǔn)值,把小于等于基準(zhǔn)值的元素放在左側(cè)昙篙,大于基準(zhǔn)值的元素放在右側(cè)腊状。


推薦文章:
iOS 避免常見崩潰(二)
算法小專欄:選擇排序
iOS Runloop(一)
iOS 常用調(diào)試方法:LLDB命令
iOS 常用調(diào)試方法:斷點(diǎn)
iOS 常用調(diào)試方法:靜態(tài)分析
iOS 消息轉(zhuǎn)發(fā)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市苔可,隨后出現(xiàn)的幾起案子缴挖,更是在濱河造成了極大的恐慌,老刑警劉巖焚辅,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件映屋,死亡現(xiàn)場(chǎng)離奇詭異苟鸯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)棚点,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門早处,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘫析,你說我怎么就攤上這事砌梆。” “怎么了贬循?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵咸包,是天一觀的道長。 經(jīng)常有香客問我杖虾,道長烂瘫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任奇适,我火速辦了婚禮坟比,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚷往。我一直安慰自己温算,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布间影。 她就那樣靜靜地躺著,像睡著了一般茄茁。 火紅的嫁衣襯著肌膚如雪魂贬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天裙顽,我揣著相機(jī)與錄音付燥,去河邊找鬼。 笑死愈犹,一個(gè)胖子當(dāng)著我的面吹牛键科,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漩怎,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼勋颖,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了勋锤?” 一聲冷哼從身側(cè)響起饭玲,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叁执,沒想到半個(gè)月后茄厘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矮冬,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年次哈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胎署。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窑滞,死狀恐怖琼牧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葛假,我是刑警寧澤障陶,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站聊训,受9級(jí)特大地震影響抱究,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜带斑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一鼓寺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勋磕,春花似錦妈候、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赶站,卻和暖如春幔虏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贝椿。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工想括, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烙博。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓瑟蜈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渣窜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铺根,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • 一、 單項(xiàng)選擇題(共71題) 對(duì)n個(gè)元素的序列進(jìn)行冒泡排序時(shí)乔宿,最少的比較次數(shù)是( )夷都。A. n ...
    貝影閱讀 9,035評(píng)論 0 10
  • 1. 關(guān)于診斷X線機(jī)準(zhǔn)直器的作用,錯(cuò)誤的是()。 (6.0 分) A. 顯示照射野 B. 顯示中心線 C. 屏蔽多...
    我們村我最帥閱讀 10,324評(píng)論 0 5
  • 學(xué)習(xí)分而治之(divide and conquer, D&C)——快速排序 書中先講了一個(gè)小案例囤官,如果將一塊長方形...
    天驅(qū)丶閱讀 248評(píng)論 0 0
  • 我是誰冬阳? 一個(gè)處在迷茫期的女青年 生活工作一團(tuán)糟的孤獨(dú)者 愛哭愛鬧愛笑愛瘋的逗逼 安靜文藝內(nèi)向努力的學(xué)生 以上,都...
    六翎閱讀 279評(píng)論 0 1
  • 多少次信誓旦旦的承諾党饮,被生活收藏肝陪;多少次承諾的明天變成昨天。是生活先對(duì)我動(dòng)了手刑顺,還是我根本就不懂得生活氯窍。 曾經(jīng),我...
    艾孤璟閱讀 229評(píng)論 0 0