算法導(dǎo)論-歸并排序

1.偽代碼

'''MERGE(A,p,q,r)'''
n1 = q - p + 1  //L.length
n2 = r - q      //R.length
let L[1..n1+1] and R[1..n2+1] be new arrays
for i = 1 to n1
    L[i] = A[p + i - 1]
for j = 1 to n2
    R[j] = A[q + j]
L[n1 + 1] = ∞
R[n2 + 1] = ∞
i = 1
j = 1
for k = p to r
    if L[i] <= R[j]
        A[k] = L[I]
        i = i + 1
    else
        A[k] = R[j]
        j = j + 1
'''MERGE-SORT(A, p, r)'''
if p < r
    q = [(p+r)/2]
    MERGE-SORT(A, p, q)
    MERGE-SORT(A, q+1, r)
    MERGE(A,p,q,r)

MERGE算法圖示

2.Python代碼

def merge(A, p, q, r):
    #A[p:q+1]   ,  A[q+1:r+1]
    L = A[p:q+1]
    R = A[q+1:r+1]
    i = 0
    j = 0
    for k in range (p, r+1):
        if i < len(L) and j < len(R):
            if L[i] <= R[j]:
                A[k] = L[I]
                i = i + 1
            else:
                A[k] = R[j]
                j = j + 1
        elif i < len(L):
            A[k] = L[I]
            i = i + 1
        else:
            A[k] = R[j]
            j = j + 1
    return A
def merge_sort(A, p ,r):
    if p < r:
        q = (p+r)/2
        merge_sort(A, p, q)
        merge_sort(A, q+1, r)
        merge(A,p,q,r)

result:

Before:
[34, 45, 12, 32, 100, 46, 82, 11]
After:
[11, 12, 32, 34, 45, 46, 82, 100]

循環(huán)不變性對(duì)于歸并算法

  1. 初始化: 在循環(huán)之前,子數(shù)組為空,L和R數(shù)組升序排列, i=j=1, 分別指向數(shù)組最小值
  2. 保持: 每次循環(huán)從L和R中取出當(dāng)前指向兩者中小的值,此值為L和R所有值中的最小值,被取用值的數(shù)組的指針向后指,保證L和R是為歸并的值,此時(shí)子數(shù)組升序排列且最大值 <= L和R的最小值
  3. 終止: 結(jié)束時(shí) 子數(shù)組,L和R數(shù)組均指向數(shù)組最大值,此時(shí)子數(shù)組為L和R中的數(shù)值升序排列

歸并算法遞歸部分:MERGE_SORT(A,p,r)

遞歸二分?jǐn)?shù)組,直到p<=r, 即細(xì)分到單元素?cái)?shù)組,所以已經(jīng)排好序.
遞歸歸并子數(shù)組,直到將所有數(shù)據(jù)合并完.

MERGE_SORT算法圖示


歡迎關(guān)注我的博客Vagitus – Pythonista

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猴蹂,一起剝皮案震驚了整個(gè)濱河市疏尿,隨后出現(xiàn)的幾起案子祠乃,更是在濱河造成了極大的恐慌藐俺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鱼炒,死亡現(xiàn)場離奇詭異衔沼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門指蚁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菩佑,“玉大人,你說我怎么就攤上這事凝化∩耘鳎” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵搓劫,是天一觀的道長瞧哟。 經(jīng)常有香客問我,道長枪向,這世上最難降的妖魔是什么勤揩? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮秘蛔,結(jié)果婚禮上沿量,老公的妹妹穿的比我還像新娘伶选。我一直安慰自己超升,他們只是感情好干像,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倦畅,像睡著了一般遮糖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叠赐,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天止吁,我揣著相機(jī)與錄音,去河邊找鬼燎悍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盼理,可吹牛的內(nèi)容都是我干的谈山。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宏怔,長吁一口氣:“原來是場噩夢啊……” “哼奏路!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起臊诊,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鸽粉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后抓艳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體触机,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了儡首。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片片任。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蔬胯,靈堂內(nèi)的尸體忽然破棺而出对供,到底是詐尸還是另有隱情,我是刑警寧澤氛濒,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布产场,位于F島的核電站,受9級(jí)特大地震影響舞竿,放射性物質(zhì)發(fā)生泄漏京景。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一炬灭、第九天 我趴在偏房一處隱蔽的房頂上張望醋粟。 院中可真熱鬧,春花似錦重归、人聲如沸米愿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽育苟。三九已至,卻和暖如春椎木,著一層夾襖步出監(jiān)牢的瞬間违柏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工香椎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漱竖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓畜伐,卻偏偏與公主長得像馍惹,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玛界,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 排序算法 冒泡排序 選擇排序 插入排序 快速排序(最常見) 希爾排序 歸并排序 源碼:Sorting 冒泡排序 冒...
    廖少少閱讀 2,724評(píng)論 12 101
  • 環(huán)境管理管理Python版本和環(huán)境的工具万矾。p–非常簡單的交互式python版本管理工具。pyenv–簡單的Pyth...
    MrHamster閱讀 3,794評(píng)論 1 61
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,482評(píng)論 6 427
  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,577評(píng)論 1 118
  • 裴沙子閱讀 133評(píng)論 0 1