算法 -- 歸并排序 - 草稿

merge 歸并排序原理

歸并排序 == 遞歸 + 合并

合并

將兩個有序的數(shù)組合并成一個有序的大數(shù)組共缕;(從兩個小數(shù)組的第一個元素開始比較洗出,將較小的放進大數(shù)組的第一個元素;再將兩個小數(shù)組最前面的元素比較图谷,將較小的放進大數(shù)組的第二個元素....直到一個小數(shù)組先耗盡翩活,將另一個小數(shù)組直接追加到大數(shù)組后面)

遞歸

假設給定一個數(shù)組,要將其排序便贵;可以先遞歸地將數(shù)組分半菠镇,直到不能再分(此時,一個小數(shù)組只有一個元素)承璃,再將小數(shù)組逐漸合并成大數(shù)組

原地歸并

給定一個數(shù)組利耍,創(chuàng)建一個副本;將副本中元素排序后復制到原來的數(shù)組中(遞歸后,第一次是sample[0]和sample[1] 比較后隘梨,依次復制經(jīng)數(shù)組程癌;第二次是 sample[3] 和 sample[4] 比較后,復制進數(shù)組)轴猎;這樣存儲結(jié)果時不用創(chuàng)建新的數(shù)組嵌莉,節(jié)省了空間;

分解大數(shù)組

分解大數(shù)組有兩種方法:自頂向下 和 自底向上

  • 自頂向下:寫一個將數(shù)組分成兩半的函數(shù)捻脖,遞歸地調(diào)用該函數(shù)直到不能再分解(此時一個小數(shù)組只包含一個元素)
  • 自底向上:既然遞歸底部上一個小數(shù)組只包含一個元素锐峭,那么可以一開始就直接從副本一個一個地讀取,比較后郎仆,放進大數(shù)組中只祠;(類似于解決大問題中的小問題兜蠕,再將所有解決的小問題合并起來)

代碼

遞歸的代碼分為兩大部分:

  • 合并
  • 分解
    • 自頂向下
    • 自底向上

合并代碼

#!/usr/bin/python3

class Merge:
    def merge(self, sample, low, mid, high):
        aux = sample[:]

        # part 1: [low:mid]     index: i
        # part 2: [mid+1:high]  index: j
        # sample  -- index: n
        i = low
        j = mid + 1
        for n in range(low, high+1):
            if i > mid:  # part 1 over
                sample[n] = aux[j]
                j += 1
            elif j > high: # part 2 over
                sample[n] = aux[i]
                i += 1
            elif aux[i] < aux[j]:
                sample[n] = aux[i]
                i += 1
            else: 
                sample[n] = aux[j]
                j += 1

    def sortTtoB(self, sample, low, high):
        mid = low + (high - low) // 2 
        if low >= high:
            pass
        else:
            self.sortTtoB(sample, low, mid)
            self.sortTtoB(sample, mid + 1, high)
            self.merge(sample, low, mid, high)


if __name__ == '__main__':
    sample = input().split()
    sort = Merge()
    sort.sortTtoB(sample, 0, len(sample) - 1)
    for elem in sample:
        print(elem, end=' ')
    print()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扰肌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子熊杨,更是在濱河造成了極大的恐慌曙旭,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晶府,死亡現(xiàn)場離奇詭異桂躏,居然都是意外死亡,警方通過查閱死者的電腦和手機川陆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門剂习,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人较沪,你說我怎么就攤上這事鳞绕。” “怎么了尸曼?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵们何,是天一觀的道長。 經(jīng)常有香客問我控轿,道長冤竹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任茬射,我火速辦了婚禮鹦蠕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘在抛。我一直安慰自己钟病,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著档悠,像睡著了一般廊鸥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辖所,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天惰说,我揣著相機與錄音,去河邊找鬼缘回。 笑死吆视,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的酥宴。 我是一名探鬼主播啦吧,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拙寡!你這毒婦竟也來了授滓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肆糕,失蹤者是張志新(化名)和其女友劉穎般堆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诚啃,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡淮摔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了始赎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片和橙。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖造垛,靈堂內(nèi)的尸體忽然破棺而出魔招,到底是詐尸還是另有隱情,我是刑警寧澤筋搏,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布仆百,位于F島的核電站,受9級特大地震影響奔脐,放射性物質(zhì)發(fā)生泄漏俄周。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一髓迎、第九天 我趴在偏房一處隱蔽的房頂上張望峦朗。 院中可真熱鬧,春花似錦排龄、人聲如沸波势。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春悼尾,著一層夾襖步出監(jiān)牢的瞬間坑鱼,已是汗流浹背耳鸯。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工樱衷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人店溢。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓叁熔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親床牧。 傳聞我的和親對象是個殘疾皇子荣回,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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

  • 數(shù)據(jù)結(jié)構(gòu)與算法--歸并排序 歸并排序 歸并排序基于一種稱為“歸并”的簡單操作。比如考試可能會分年級排名和班級排名戈咳,...
    sunhaiyu閱讀 877評論 0 6
  • 1 初級排序算法 排序算法關(guān)注的主要是重新排列數(shù)組元素心软,其中每個元素都有一個主鍵。排序算法是將所有元素主鍵按某種方...
    深度沉迷學習閱讀 1,408評論 0 1
  • 概述 排序有內(nèi)部排序和外部排序除秀,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序糯累,而外部排序是因排序的數(shù)據(jù)很大算利,一次不能容納全部...
    蟻前閱讀 5,183評論 0 52
  • 九溪蠻閱讀 240評論 0 0
  • "渙渙效拭,你這發(fā)財樹養(yǎng)的真好暂吉,都吐水了" “啊缎患?什么叫吐水?” “你看它的葉子上有小水珠慕的,說明它很健康,生長的很舒適...
    Freesia渙渙閱讀 1,351評論 0 0