Java排序算法:歸并排序

歸并排序

基本思想:

將兩個(gè)有序表合并成一個(gè)有序表。

歸并排序.gif

歸并排序示例:

0 1 2 3 4 5 6 7 狀態(tài)
49 38 65 97 76 13 27 49' 初始狀態(tài)
38 49 65 97 76 13 27 49'
38 49 65 97 76 13 27 49'
38 49 65 97 76 13 27 49'
38 49 65 97 13 76 27 49'
38 49 65 97 13 76 27 49'
38 49 65 97 13 27 49' 76
13 27 38 49' 49 65 76 97

代碼:

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] s = { 49, 38, 65, 97, 76, 13, 27, 49 };
        new MergeSort().mergeSort(s, 0, s.length - 1);

        for (int i = 0; i < s.length; i++) {
            System.out.printf("%d ", s[i]);
        }
    }

    void mergeSort(int s[], int start, int end) {
        if (start < end) {
            int mid = (start + end) / 2;
            mergeSort(s, start, mid);
            mergeSort(s, mid + 1, end);
            merge(s, start, mid, end);

        }

    }

    void merge(int s[], int start, int mid, int end) {

        int[] temp = new int[s.length];

        int p1 = start, p2 = mid + 1, k = start;

        while (p1 <= mid && p2 <= end) {
            if (s[p1] <= s[p2]) {
                temp[k++] = s[p1++];

            } else {
                temp[k++] = s[p2++];
            }
        }

        while (p1 <= mid) {
            temp[k++] = s[p1++];
        }
        while (p2 <= end) {
            temp[k++] = s[p2++];

        }

        for (int i = start; i <= end; i++) {
            s[i] = temp[i];
        }
    }

輸出:

13 27 38 49 49 65 76 97 

歸并排序的效率分析

排序算法 平均時(shí)間性能 最好時(shí)間性能 最壞時(shí)間性能 輔助空間 穩(wěn)定性
歸并排序
穩(wěn)定
  • 歸并排序的時(shí)間復(fù)雜度等于歸并趟數(shù)與每一趟時(shí)間復(fù)雜度的乘積胀糜。對(duì) n個(gè)元素的表,將這n個(gè)元素看作葉結(jié)點(diǎn)瓜富,若將兩兩歸并生成的子表看作它們的父結(jié)點(diǎn)写妥,則歸并過(guò)程對(duì)應(yīng)由葉向根生成一棵二叉樹(shù)的過(guò)程。所以歸并趟數(shù)等于二叉數(shù)的高度減1舀瓢,即?log2n?黔衡。每一趟歸并需移動(dòng) n個(gè)元素蚓聘,即每一趟歸并的時(shí)間復(fù)雜度為O(n)。因此盟劫,2-路歸并排序的時(shí)間復(fù)雜度為O(nlog2n)夜牡。
  • 利用歸并排序時(shí),需要利用與待排序數(shù)組相同的輔助數(shù)組作臨時(shí)單元捞高,故該排序方法的空間復(fù)雜度為O(n)氯材,比前面介紹的其它排序方法占用的空間大。
  • 由于歸并排序中硝岗,每?jī)蓚€(gè)有序表合并成一個(gè)有序表時(shí)氢哮,若分別在兩個(gè)有序表中出現(xiàn)有相同排序碼,則會(huì)使前一個(gè)有序表中相同排序碼先復(fù)制型檀,后一有序表中相同排序碼后復(fù)制冗尤,從而保持它們的相對(duì)次序不會(huì)改變。所以,歸并排序是一種穩(wěn)定的排序方法裂七。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皆看,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子背零,更是在濱河造成了極大的恐慌腰吟,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徙瓶,死亡現(xiàn)場(chǎng)離奇詭異毛雇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)侦镇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)灵疮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人壳繁,你說(shuō)我怎么就攤上這事震捣。” “怎么了闹炉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵蒿赢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我剩胁,道長(zhǎng)诉植,這世上最難降的妖魔是什么祥国? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任昵观,我火速辦了婚禮,結(jié)果婚禮上舌稀,老公的妹妹穿的比我還像新娘啊犬。我一直安慰自己,他們只是感情好壁查,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布觉至。 她就那樣靜靜地躺著,像睡著了一般睡腿。 火紅的嫁衣襯著肌膚如雪语御。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,879評(píng)論 1 290
  • 那天席怪,我揣著相機(jī)與錄音应闯,去河邊找鬼。 笑死挂捻,一個(gè)胖子當(dāng)著我的面吹牛碉纺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼骨田,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼耿导!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起态贤,我...
    開(kāi)封第一講書(shū)人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舱呻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后悠汽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體狮荔,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年介粘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了殖氏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姻采,死狀恐怖雅采,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慨亲,我是刑警寧澤婚瓜,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站刑棵,受9級(jí)特大地震影響巴刻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛉签,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一胡陪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碍舍,春花似錦柠座、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至捧书,卻和暖如春吹泡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背经瓷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工爆哑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人了嚎。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓泪漂,卻偏偏與公主長(zhǎng)得像廊营,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萝勤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350