青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

歸并排序算法以O(shè)(nlogn)最壞情形運行時間運行,而所使用的比較次數(shù)幾乎是最優(yōu)的。它可以用遞歸的形式實現(xiàn),形式簡潔易懂。但是需要注意的是當用遞歸形式時,如果數(shù)據(jù)較多,則開銷很大,實用性很差,所以我們一般采用非遞歸的形式。我這里兩種形式都給出。
      不管是遞歸還是非遞歸,歸并排序算法中基本的操作是合并兩個已經(jīng)排序的數(shù)組。
遞歸形式:
template <class T>
void MSort(T a[], int left, int right)
{
      if (left < right)
      {
            int center = (left + right) / 2;
            MSort(a, left, center);
            MSort(a, center+1, right);
            Merge(a, left, center, right, right-left+1);
      }
}

template <class T>
void MergeSort(T a[], int n)
{
      MSort(a, 0, n-1);
}
///////////////////////////////////////////////////////////////////////
非遞歸形式:
算法介紹:先介紹三個變量beforeLen,afterLen和i的作用:
int beforeLen; //合并前序列的長度
int afterLen;//合并后序列的長度,合并后序列的長度是合并前的兩倍
int i = 0;//開始合并時第一個序列的起始位置下標,每次都是從0開始
i,i+beforeLen-1,i+afterLen-1定義被合并的兩個序列的邊界。
算法的工作過程如下:
開始時,beforeLen被置為1,i被置為0。外部for循環(huán)的循環(huán)體每執(zhí)行一次,都使beforeLen和afterLen加倍。內(nèi)部的while循環(huán)執(zhí)行序列的合并工作,他的循環(huán)體每執(zhí)行一次,i都向前移動afterLen個位置。當n不是afterLen的倍數(shù)時,如果被合并序列的起始位置i,加上合并后序列的長度afterLen,超過輸入數(shù)組的邊界n,就結(jié)束內(nèi)部循環(huán);此時如果被合并序列的起始位置i,加上合并前序列的長度beforeLen,小于輸入數(shù)組的邊界n,還需要執(zhí)行一次合并工作,把最后長度不足afterLen,但超過beforeLen的序列合并起來。這個工作由算法的語句Merge(a, i, i+beforeLen-1, n-1, n);完成。

template <class T>
void MergeSort(T a[], int n)
{
      int beforeLen; //合并前序列的長度
      int afterLen = 1;//合并后序列的長度
      
      for (beforeLen=1; afterLen<n; beforeLen=afterLen)
      {
            int i = 0;//開始合并時第一個序列的起始位置下標,每次都是從0開始
            afterLen = 2 * beforeLen; //合并后序列的長度是合并前的兩倍
            
            while (i+afterLen < n)
            {
                  Merge(a, i, i+beforeLen-1, i+afterLen-1, afterLen);
                  i += afterLen;
            }
            
            if (i+beforeLen < n)
                  Merge(a, i, i+beforeLen-1, n-1, n);
      }
}
///////////////////////////////////////////////////////////
      上面兩種算法都要用到下面的合并函數(shù)。
/*函數(shù)介紹:合并兩個有序的子數(shù)組
輸入:數(shù)組a[],下標left,center,right,元素個數(shù)n,a[left]~a[center]及a[center+1]~a[right]已經(jīng)按非遞減順序排序。
輸出:按非遞減順序排序的子數(shù)組a[left]~a[right]。
*/
template <class T>
void Merge(T a[], int left, int center, int right, int n)
{
      T *t = new T[n];//存放被排序的元素
      int i = left;
      int j = center + 1;
      int k = 0;

      while (i<=center && j<=right)
      {
            if (a[i] <= a[j])
                  t[k++] = a[i++];
            else
                  t[k++] = a[j++];
      }

      if (i == center+1)
      {
            while (j <= right)
                  t[k++] = a[j++];
      }
      else
      {
            while (i <= center)
                  t[k++] = a[i++];
      }
      //把t[]的元素復(fù)制回a[]
      for (i=left,k=0; i<=right; i++,k++)
            a[i] = t[k];

      delete []t;
}
Posted on 2006-06-15 23:24 夢想飛揚 閱讀(1741) 評論(2)  編輯 收藏 引用

Feedback

# re: 我所理解的歸并排序算法  回復(fù)  更多評論   

2008-04-16 17:14 by indigio
if (i+beforeLen < n)
Merge(a, i, i+beforeLen-1, n-1, n);

感覺上漏掉了某些情況

# re: 我所理解的歸并排序算法  回復(fù)  更多評論   

2008-06-30 23:21 by delacroix
對啊,是不是漏掉了當log(n)不為整數(shù)(底數(shù)為2)時的情況?

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲成人资源网| 欧美成ee人免费视频| 久久深夜福利免费观看| 午夜精品理论片| 欧美在线视频导航| 久久亚洲精品欧美| 亚洲高清在线观看| 亚洲伦理在线观看| 亚洲在线视频观看| 久久久青草婷婷精品综合日韩| 久久久另类综合| 欧美精品观看| 国产精品午夜电影| 在线观看国产精品淫| 99视频在线精品国自产拍免费观看 | 亚洲美女黄网| 亚洲影院色在线观看免费| 欧美淫片网站| 欧美日韩的一区二区| 国产视频在线观看一区二区三区 | 亚洲全黄一级网站| 亚洲综合色丁香婷婷六月图片| 久久精品人人爽| 欧美视频在线观看免费网址| 好吊妞这里只有精品| 一本不卡影院| 蜜桃伊人久久| 亚洲综合欧美日韩| 欧美精品久久久久久久免费观看| 国产精品日韩在线播放| 91久久国产综合久久91精品网站| 亚洲欧美日韩专区| 亚洲国产视频直播| 久久久噜噜噜久久中文字免| 国产精品电影在线观看| 亚洲欧洲综合| 麻豆成人在线| 欧美一区中文字幕| 国产精品久久亚洲7777| 日韩视频在线一区| 免费欧美日韩| 久久久噜噜噜久久中文字幕色伊伊| 国产精品xxxxx| 一本一本久久a久久精品综合妖精| 久久综合九色九九| 欧美一二三区精品| 国产精品你懂的在线欣赏| 亚洲免费电影在线观看| 开元免费观看欧美电视剧网站| 国产美女在线精品免费观看| 老司机免费视频一区二区| 国产精品久久久久9999吃药| 亚洲精品影视| 欧美激情视频网站| 久久综合狠狠| 在线成人h网| 麻豆国产精品777777在线| 久久精品91| 狠狠v欧美v日韩v亚洲ⅴ| 久久gogo国模啪啪人体图| 亚洲一区二区毛片| 国产欧美精品| 欧美综合第一页| 欧美一区二区三区四区夜夜大片 | 久久激情视频久久| 亚洲欧美综合一区| 国产亚洲在线| 免费欧美高清视频| 欧美激情91| 亚洲一区二区三区三| 亚洲视频一二三| 国产日韩欧美成人| 美玉足脚交一区二区三区图片| 久久av资源网| 亚洲成色999久久网站| 亚洲国产日韩美| 国产精品theporn88| 久久精品成人一区二区三区| 欧美主播一区二区三区| 亚洲国产成人tv| 日韩亚洲国产精品| 国产九色精品成人porny| 久久天天综合| 欧美黑人多人双交| 欧美一区二区播放| 久久在线免费| 亚洲午夜久久久| 欧美一级专区免费大片| 亚洲精品久久久久| 亚洲自拍啪啪| 亚洲精品一区二区三区在线观看| 亚洲国产精品传媒在线观看| 国产精品久久久久久久久久妞妞| 久久久久欧美精品| 欧美精品v日韩精品v国产精品 | 亚欧成人在线| 六月婷婷一区| 亚洲欧洲99久久| 免费中文字幕日韩欧美| 午夜亚洲激情| 欧美激情1区| 看片网站欧美日韩| 国产精品网站视频| 亚洲国产精品成人va在线观看| 国产精品九色蝌蚪自拍| 美日韩丰满少妇在线观看| 国产精品第一区| 亚洲视频欧美在线| 亚洲一区二区三区中文字幕在线 | 性欧美超级视频| 欧美国产日韩精品免费观看| 久久精品道一区二区三区| 欧美日韩国产一级片| 欧美丰满少妇xxxbbb| 国产日韩欧美高清免费| 99re热这里只有精品免费视频| 在线成人性视频| 午夜视黄欧洲亚洲| 亚洲一区二区三区视频| 欧美激情第8页| 毛片av中文字幕一区二区| 国产精品久久久久久久久免费桃花| 欧美成人免费在线| 伊人精品久久久久7777| 欧美一区二区三区日韩视频| 亚洲欧美另类久久久精品2019| 欧美精品在线网站| 亚洲电影免费| 亚洲欧洲午夜| 男同欧美伦乱| 亚洲第一精品在线| 亚洲电影专区| 麻豆精品在线视频| 欧美激情第三页| 91久久精品视频| 欧美freesex交免费视频| 欧美成人精品| 亚洲激情六月丁香| 欧美高清免费| 日韩视频国产视频| 亚洲一区三区视频在线观看| 欧美日韩精品福利| 制服丝袜激情欧洲亚洲| 午夜在线成人av| 国产丝袜一区二区三区| 欧美一区二区视频观看视频| 久久人人97超碰人人澡爱香蕉| 国产一区二区高清| 欧美在线观看视频一区二区三区| 久久视频精品在线| 亚洲人成7777| 欧美婷婷久久| 欧美在线观看天堂一区二区三区| 久热精品在线视频| 亚洲免费观看视频| 国产精品久久网| 久久久www| 日韩一区二区久久| 久久精品中文字幕一区二区三区| 伊人狠狠色丁香综合尤物| 欧美成人激情在线| 亚洲伊人伊色伊影伊综合网| 久久夜色精品一区| 一区二区三区精密机械公司 | 136国产福利精品导航网址| 欧美sm视频| 亚洲线精品一区二区三区八戒| 欧美在线观看天堂一区二区三区| 国内精品久久久久伊人av| 欧美激情偷拍| 西西裸体人体做爰大胆久久久| 欧美va亚洲va国产综合| 宅男噜噜噜66一区二区66| 国产欧美日韩不卡免费| 欧美wwwwww| 好吊色欧美一区二区三区四区| 另类专区欧美制服同性| 亚洲黄色av一区| 国产精品劲爆视频| 麻豆精品一区二区av白丝在线| 在线亚洲欧美| 亚洲国产精品一区| 久久久久www| 一区二区动漫| 亚洲国产欧美在线| 国产九九视频一区二区三区| 欧美成人一区二区在线| 欧美一区综合| 亚洲一区二区在线| 亚洲欧洲美洲综合色网| 久久精品国产99国产精品澳门| 一区二区三区回区在观看免费视频| 狠狠色狠狠色综合人人| 欧美午夜剧场| 欧美日韩国产精品成人| 久热re这里精品视频在线6| 午夜精品久久久久久| 亚洲私人影院在线观看| 亚洲精品精选| 亚洲人成亚洲人成在线观看|