本文同步發布在csdn:
歸併排序的基本操作是將兩個有序陣列合併成乙個有序陣列,原理是運用分治思想,遞迴地將乙個陣列的左右兩部分有序數列進行歸併。
c/c++的遞迴實現:
1: 遞迴寫法2//
34 #include 5 #include 6
#define elementtype int//
自定義資料型別
7using
namespace
std;89
void mergesort(elementtype a, int n);//
n為陣列大小,統一函式介面
10void msort(elementtype a, elementtype tmpa, int l, int rightend);//
傳入左右邊界
11void merge(elementtype a, elementtype tmpa, int l, int r, int rightend);//
將有序的兩個部分進行歸併
1213
14int
main()
1526
27void mergesort(elementtype a, int
n) 33
else
34 printf("
error!\n
");//
記憶體申請失敗35}
3637
void msort(elementtype a, elementtype tmpa, int l, int
rightend) 44}
4546
void merge(elementtype a, elementtype tmpa, int l, int r, int
rightend)
56while (l <=leftend)
57 tmpa[tmpl++] = a[l++];
58while (r <=rightend)
59 tmpa[tmpl++] = a[r++];
60for (int i = 0; i < elementnum; i++, rightend--)
61 a[rightend] =tmpa[rightend];
62 }
c/c++的非遞迴寫法:
1//mergesort_without_recursion.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。2//
歸併排序的非遞迴寫法
34 #include 5
#define elementtype int
6using
namespace
std;78
void mergesort(elementtype a, int
n);9
void msort(elementtype a, elementtype tmpa, int length, int
n);10
void merge(elementtype a, elementtype tmpa, int l, int r, int
rightend);
1112
intmain()
1324
25void mergesort(elementtype a, int
n) 35
free
(tmpa);36}
37else
38 printf("
error!\n
");//
記憶體申請失敗39}
4041
void msort(elementtype a, elementtype tmpa, int length, int
n) 51
52void merge(elementtype a, elementtype tmpa, int l, int r, int
rightend)
61while (l <=leftend)
62 tmpa[tmpl++] = a[l++];
63while (r <=rightend)
64 tmpa[tmpl++] = a[r++];
65 }
歸併排序(遞迴與非遞迴)
1.遞迴 把序列分成元素個數盡量相等的兩部分,再將兩半分別排序,合併有序的兩個序列 遞迴 void merge sort int a,int low,int heigh,int t a為待排序陣列,low,high分別為a的上下限 0 n 1 t為輔助陣列 for i low,j 0 i heigh...
歸併排序 遞迴 非遞迴
首先簡單的介紹一下歸併演算法的核心思想 將我們將一組資料分成若干個組,即分到每組資料為1個元素的情況下就不用分了,然後在分別比較每兩組資料元素的大小,將其合併為一組資料再去和其他同等級別的組的資料元素取比較,然後合併到臨時的空間中然後在複製給原空間,依此類推,直到最後全部合併完畢,陣列就成為一組有序...
歸併排序(遞迴 非遞迴 自然歸併排序)
演算法思想 歸併排序是分治法的典型應用,其思想是不斷地將兩個有序的陣列合併為乙個有序陣列。遞迴實現 include void merge int a,int left,int m,int right void mergesortaux int a,int left,int right void me...