排序_二路歸并排序

基本思想:把一個長度為n 的無序序列看成是 n 個長度為 1 的有序子序列 悦穿,首先做兩兩歸并羹膳,得到 [n / 2] 個長度為 2 的有序子序列 ;再做兩兩歸并肠套,…舰涌,如此重復(fù),直到最后得到一個長度為 n 的有序序列你稚。

實(shí)現(xiàn)代碼:

一次二路歸并算法:

static void Merge(int[] a, int[] swap, int k, int n)
{//swap用于存放一次歸并后的數(shù)組瓷耙,k為有序子數(shù)組長度,n為數(shù)組大小

    int i, j, low1, up1, low2, up2, m;
    low1 = 0; //第一個子數(shù)組下界為0
    m = 0;  //swap數(shù)組下標(biāo)
    while (low1 + k <= n - 1)
    {
        low2 = low1 + k;//第二個子數(shù)組下界
        up1 = low2 - 1; //第一個子數(shù)組上界
        //第二個子數(shù)組上界需要考慮是否超出數(shù)組范圍入宦,超出則直接等于最后下標(biāo)
        up2 = (low2 + k - 1 <= n - 1) ? low2 + k - 1 : n - 1;
        //同時遍歷兩個子數(shù)組,直到任意一個遍歷完
        for (i = low1, j = low2; i <= up1 && j <= up2; m++)
        {//從小到大依次存到swap數(shù)組中
            if (a[i] <= a[j])
            {
                swap[m] = a[i];
                i++;
            }
            else
            {
                swap[m] = a[j];
                j++;
            }
        }
        //將未遍歷完的子數(shù)組剩下的元素存放到swap中
        while (i <= up1)
        {
            swap[m] = a[i];
            m++;
            i++;
        }
        while (j <= up2)
        {
            swap[m] = a[j];
            m++;
            j++;
        }

        low1 = up2 + 1;//跳到下兩個子數(shù)組室琢,循環(huán)繼續(xù)
    }
    //把剩下只夠一組的數(shù)據(jù)依次放到swap的最后面
    for (i = low1; i < n; i++, m++)
    {
        swap[m] = a[i];
    }
}

二路歸并算法:

static void MergeSoprt(int[] a, int n)
{
    int i, k = 1;
    int[] swap = new int[n];
    while (k < n)
    {
        Console.WriteLine("有序子數(shù)組長度 = " + k);
        Merge(a, swap, k, n);
        for (i = 0; i < n; i++)
        {
            a[i] = swap[i];
            Console.Write(a[i] + " ");
        }
        Console.WriteLine();
        k *= 2;
    }
}

測試代碼:

static void Main(string[] args)
{
    int[] nums = { 21, 25, 49, 25, 93, 62, 72, 8, 37, 16, 54 };
    MergeSoprt(nums, nums.Length);

    Console.ReadKey();
}

總結(jié):
1乾闰、合并就是兩個數(shù)組里的元素相互比較,從小到大存到一個新數(shù)組中盈滴;
2涯肩、時間效率: O(nlog2n)
3轿钠、穩(wěn)定性:穩(wěn)定


最后總結(jié):

思考:
1、若初始記錄基本有序病苗,則選用哪些排序方法比較適合疗垛?
答:可選用直接插入、簡單選擇硫朦、堆排序贷腕、冒泡排序、歸并排序咬展、(希爾排序)等方法泽裳,其中最快的是
插入排序和冒泡排序,因?yàn)橹挥斜容^動作破婆,無需移動元素涮总。此時平均時間復(fù)雜度為O(n)。
2祷舀、若初始記錄基本無序瀑梗,最好選用哪些排序方法?
答:最好選用快速裳扯、希爾抛丽、歸并、堆排序等嚎朽,這些算法的共同特點(diǎn)是铺纽,通過“振蕩”讓數(shù)值相差不大但位置差異很大的元素盡快到位。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哟忍,一起剝皮案震驚了整個濱河市狡门,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锅很,老刑警劉巖其馏,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異爆安,居然都是意外死亡叛复,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門扔仓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褐奥,“玉大人,你說我怎么就攤上這事翘簇∏寺耄” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵版保,是天一觀的道長呜笑。 經(jīng)常有香客問我夫否,道長,這世上最難降的妖魔是什么叫胁? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任凰慈,我火速辦了婚禮,結(jié)果婚禮上驼鹅,老公的妹妹穿的比我還像新娘微谓。我一直安慰自己,他們只是感情好谤民,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布堰酿。 她就那樣靜靜地躺著,像睡著了一般张足。 火紅的嫁衣襯著肌膚如雪触创。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天为牍,我揣著相機(jī)與錄音哼绑,去河邊找鬼。 笑死碉咆,一個胖子當(dāng)著我的面吹牛抖韩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疫铜,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼茂浮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壳咕?” 一聲冷哼從身側(cè)響起席揽,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谓厘,沒想到半個月后幌羞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竟稳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年属桦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片他爸。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡聂宾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诊笤,到底是詐尸還是另有隱情系谐,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布盏混,位于F島的核電站蔚鸥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏许赃。R本人自食惡果不足惜止喷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望混聊。 院中可真熱鬧弹谁,春花似錦、人聲如沸句喜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咳胃。三九已至植康,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間展懈,已是汗流浹背销睁。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工奉呛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留濒蒋,地道東北人案训。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓腾它,卻偏偏與公主長得像麦射,于是被迫代替她去往敵國和親准给。 傳聞我的和親對象是個殘疾皇子摹迷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359