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

天之道

享受編程的樂(lè)趣。
posts - 118, comments - 7, trackbacks - 0, articles - 0
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

歸并排序法是將兩個(gè)(或兩個(gè)以上)有序表合并成一個(gè)新的有序表,即把待排序序列分為若干個(gè)子序列,每個(gè)子序列是有序的。然后再把有序子序列合并為整體有序序列。
例如,有數(shù)列{6,202,100,301,38,8,1}
1.  剛開(kāi)始的分組如下:
  i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 比較次數(shù)為3次
 2. 第二次,兩兩分組合并
  i=2 [ 6 100 202 301 ] [ 1 8 38 ] 比較次數(shù)為4
3.  第三次,繼續(xù)合并
  i=3 [ 1 6 8 38 100 202 301 ] 比較次數(shù)為4
總計(jì)的比較次數(shù)為11次
歸并排序具體工作原理如下(假設(shè)序列共有n個(gè)元素):
1.     將序列每相鄰兩個(gè)數(shù)字進(jìn)行歸并操作,形成floor(n / 2)個(gè)序列,排序后每個(gè)序列包含兩個(gè)元素
2.     將上述序列再次歸并,形成floor(n / 4)個(gè)序列,每個(gè)序列包含四個(gè)元素
3.     重復(fù)步驟2,直到所有元素排序完畢
     歸并操作的過(guò)程如下:
1.     申請(qǐng)空間,使其大小為兩個(gè)已經(jīng)排序序列之和,該空間用來(lái)存放合并后的序列
2.     設(shè)定兩個(gè)指針,最初位置分別為兩個(gè)已經(jīng)排序序列的起始位置
3.     比較兩個(gè)指針?biāo)赶虻脑兀x擇相對(duì)小的元素放入到合并空間,并移動(dòng)指針到下一位置
4.     重復(fù)步驟3直到某一指針達(dá)到序列尾
5.     將另一序列剩下的所有元素直接復(fù)制到合并序列尾

自底向上歸并,如圖所示:



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

#include <iostream>
 
 using namespace std;
 
 void merge(int*arr, int p, int q, int r)
 {
     int n1 = q - p + 1;
     int n2 = r - q;
 
     int* L = new int[n1];
     int* R = new int[n2];
 
     for(int i = 0; i < n1; i++)
     {
         L[i] = arr[p + i];
     }
     for(int j = 0; j < n2; j++)
     {
         R[j] = arr[q + j + 1];
     }
 
     int i = 0;
     int j = 0;
     int k = p;
 
     while((i < n1) && (j < n2))
     {
         if(L[i] <= R[j])
         {
             arr[k] = L[i];
             i++;
         }
         else
         {
             arr[k] = R[j];
             j++;
         }
         k++;
     }
 
     if (i < n1)
     {
         for(; i < n1; i++, k++)
         {
             arr[k] = L[i];
         }
     }
     if (j < n2)
     {
         for(; j < n2; j++, k++)
         {
             arr[k] = R[j];
         }
     }
 }
 
 void mergesort(int* arr, int p, int r)
 {
     int q = 0;
     if(p < r)
     {
         q = (p + r) / 2;
         mergesort(arr, p, q);
         mergesort(arr, q + 1, r);
         merge(arr, p, q, r);
     }
 }
 
 int main()
 {
     int a[] = {5, 2, 4, 7, 1, 3, 2, 6};
     mergesort(a, 0, 7);
     for(int i = 0; i < 8; i++)
     {
         cout << a[i] << " ";
     }
     cout << endl;
     return 0;
 }

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

/**
  * merge_sort: 非遞歸實(shí)現(xiàn) --迭代
  * 非遞歸思想: 將數(shù)組中的相鄰元素兩兩配對(duì)。用merge函數(shù)將他們排序,
  * 構(gòu)成n/2組長(zhǎng)度為2的排序好的子數(shù)組段,然后再將他們排序成長(zhǎng)度為4的子數(shù)組段,
  * 如此繼續(xù)下去,直至整個(gè)數(shù)組排好序。
 *
*/

 #include <stdio.h>
 #include <stdlib.h>

 // merge_sort(): 非遞歸實(shí)現(xiàn)-自底向上
 
// 將原數(shù)組劃分為left[minmax] 和 right[minmax]兩部分
 void merge_sort(int *list, int length)
 {
     int i, left_min, left_max, right_min, right_max, next;
     int *tmp = (int*)malloc(sizeof(int) * length);

     if (tmp == NULL)
     {
         fputs("Error: out of memory\n", stderr);
         abort();
     }

     for (i = 1; i < length; i *= 2) // i為步長(zhǎng),1,2,4,8……
     {
         for (left_min = 0; left_min < length - i; left_min = right_max)
         {
             right_min = left_max = left_min + i; //right_min取left_max的值,以下要用到left_max的值才不會(huì)改變left_max原先值
             right_max = left_max + i;

             if (right_max > length) //如果right_max超出了數(shù)組長(zhǎng)度,則right_max等于數(shù)組長(zhǎng)度
                 right_max = length;

             next = 0;
             while (left_min < left_max && right_min < right_max) //tmp[next]存儲(chǔ)子數(shù)組中的最小值
                 tmp[next++] = list[left_min] > list[right_min] ? list[right_min++] : list[left_min++];

             while (left_min < left_max)  //如果left_min小于left_max,則將最小值原封不動(dòng)地賦給list[--right_min],right_min 要先減1
                 list[--right_min] = list[--left_max];

             while (next > 0) //將tmp[next]存儲(chǔ)的最小值放入list[--right_min]中
                 list[--right_min] = tmp[--next];
         }
         if(i == 1) //打印第一次歸并后的數(shù)字排列
         {
             for(int j=0;j<length;j++)
               printf("%d ",list[j]);
             printf("\n");
         }
     }

     free(tmp);

 }


 int main()
 {
     int a[1000],t,i;
     scanf("%d",&t);
     for(i=0;i<t;i++)
     {
         scanf("%d",&a[i]);
     }
     merge_sort(a, t);

     // print array
     for (i = 0; i < t; i++)
         printf("%d ", a[i]);

     return 0;
 }
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久在线免费观看| 国产精品一级二级三级| 欧美一区亚洲二区| 在线中文字幕不卡| 一本色道久久综合亚洲二区三区| 亚洲人成啪啪网站| 亚洲国产精品一区制服丝袜| 欧美激情小视频| 嫩草影视亚洲| 欧美另类综合| 欧美午夜一区二区三区免费大片| 欧美日韩国产三级| 欧美午夜视频在线| 亚洲黄一区二区| 蜜桃久久av| 91久久夜色精品国产九色| 国产精品专区h在线观看| 亚洲美女淫视频| 午夜精品一区二区三区在线视| 欧美综合国产| 亚洲国产岛国毛片在线| 亚洲精品免费网站| 亚洲一区影音先锋| 久久久精品动漫| 欧美激情精品久久久久久大尺度| 欧美三级在线| 亚洲福利在线观看| 欧美电影免费观看| 一区二区三区四区五区精品视频| 亚洲国产欧美精品| 亚洲伊人第一页| 国产精品久久久久高潮| 影音先锋亚洲视频| 一本久久a久久精品亚洲| 999亚洲国产精| 欧美一区二区免费| 国产精品www网站| 欧美日韩国产美| 欧美日韩精品在线观看| 中日韩高清电影网| 久久久99久久精品女同性| 欧美国产日韩一区二区| 欧美日韩一区综合| 欧美午夜性色大片在线观看| 国产亚洲精品久久久久动| 国产精自产拍久久久久久| 亚洲精品免费网站| 亚洲人体一区| 久久久久一区二区| 久久美女性网| 亚洲一区三区视频在线观看| 欧美国产日本韩| 国产有码一区二区| 在线播放中文字幕一区| 亚洲在线不卡| 欧美一区二区黄色| 欧美国产日韩一区二区| 亚洲第一精品夜夜躁人人爽| 亚洲网站在线看| 欧美一区二区高清在线观看| 欧美日韩亚洲一区三区| 亚洲精品综合久久中文字幕| 欧美成在线观看| 久久夜色精品国产亚洲aⅴ| 欧美激情视频一区二区三区免费| 激情一区二区| 亚洲永久在线| 亚洲系列中文字幕| 国产精品大片免费观看| 午夜欧美大片免费观看| 亚洲图片自拍偷拍| 国产精品一区在线观看| 欧美在线视频在线播放完整版免费观看 | 国产精品日本精品| 国产一区二区精品久久91| 羞羞色国产精品| 免费成人小视频| 久久久噜噜噜久噜久久| 欧美天天综合网| 午夜精品久久久久久久久久久| 一区二区三区四区五区在线| 国产精品美女在线| 亚洲人成网站色ww在线| 欧美激情1区2区3区| 欧美激情网友自拍| 亚洲图片在线观看| 亚洲欧美日韩一区| 欧美成人四级电影| 影音先锋欧美精品| 国产精品美女| 久久免费高清视频| 免费在线一区二区| 亚洲永久网站| 久久亚洲欧美| 国产精品99久久99久久久二8 | 一区二区三区产品免费精品久久75| 国产精品av一区二区| 久久欧美肥婆一二区| 欧美绝品在线观看成人午夜影视| 香蕉久久夜色精品| 欧美护士18xxxxhd| 欧美在线播放一区| 欧美高清在线一区| 欧美一区二区日韩一区二区| 久久亚洲综合网| 亚洲免费影院| 亚洲精品久久视频| 国产精品男人爽免费视频1| 久久亚洲风情| 欧美一区午夜视频在线观看| 欧美日韩一区二区高清| 欧美在线播放一区二区| 蜜桃久久精品一区二区| 尤物99国产成人精品视频| 亚洲精品一区二区三区99| 免费日韩成人| 性视频1819p久久| 欧美日韩大陆在线| 免费在线看一区| 可以免费看不卡的av网站| 亚洲尤物在线| 欧美精品手机在线| 免费看成人av| 国产亚洲欧美另类一区二区三区| 亚洲精品欧洲| 最新国产拍偷乱拍精品| 欧美有码视频| 欧美亚洲一区二区在线观看| 欧美日韩中文在线| 亚洲第一精品夜夜躁人人爽| 永久久久久久| 久久免费精品日本久久中文字幕| 欧美在线亚洲在线| 国产噜噜噜噜噜久久久久久久久| 亚洲精品一区二区在线观看| 亚洲韩国日本中文字幕| 久久蜜臀精品av| 久久综合综合久久综合| 欧美ed2k| 欧美国产综合| 亚洲国产一区二区三区青草影视| 久久爱www久久做| 亚洲精品在线视频| 久久综合中文字幕| 欧美黄色成人网| 亚洲国产一区二区三区青草影视 | 久久精品国产99| 99精品欧美一区二区蜜桃免费| 欧美视频二区36p| 亚洲电影免费观看高清| 亚洲国产日韩欧美| 久久夜色精品亚洲噜噜国产mv | 日韩午夜电影av| 亚洲综合精品| 亚洲国产精品久久久久秋霞不卡| 久久激五月天综合精品| 欧美专区一区二区三区| 国产日韩精品一区观看| 亚洲国产精品久久| 日韩午夜免费| 国产精品欧美一区喷水| 欧美亚洲免费在线| 美女主播一区| 宅男66日本亚洲欧美视频| 国产精品美女主播| 久久久久久久久久久久久女国产乱 | 亚洲成人在线网| 亚洲一区二区在线| 欧美婷婷在线| 亚洲视频自拍偷拍| 久久久久久国产精品mv| 在线日韩成人| 欧美日韩视频一区二区| 亚洲网友自拍| 欧美大片一区二区三区| 亚洲免费在线观看视频| 狠狠色狠狠色综合| 一本色道婷婷久久欧美| 午夜精品久久久久久99热软件| 国产亚洲欧美一区二区三区| 欧美成人中文| 性做久久久久久| 欧美亚洲在线视频| 狠狠做深爱婷婷久久综合一区| 久久另类ts人妖一区二区| 亚洲精选91| 玖玖精品视频| 亚洲视频在线二区| 亚洲黄色免费电影| 国产性猛交xxxx免费看久久| 欧美精品一区二| 久久久久久久999| 亚洲一级电影| 亚洲美女av黄| 亚洲国产欧美不卡在线观看| 久久精品午夜| 午夜精品一区二区三区电影天堂| 亚洲精品视频二区| 在线电影欧美日韩一区二区私密| 国产精品美女诱惑|