intless_(int a, int b) { if (a < b) return1; else return0; }
voidmerge(int a[], int lo, int mid, int hi) { int i = lo, j = mid + 1; int aux[maxsize]; for (int k = lo; k <= hi; k++) aux[k] = a[k];//辅助数组
for (int k = lo; k <= hi; k++) { if (i > mid) a[k] = aux[j++]; elseif (j > hi) a[k] = aux[i++]; elseif (less_(aux[j], aux[i])) a[k] = aux[j++]; else a[k] = aux[i++]; } }
intmain(int argc, charconst *argv[]) { int a[] = {1,2,9, 0,2}; //先决条件,左右两边都有序 int length = sizeof(a) / sizeof(a[0]); int lo=0; int hi=length-1; int mid=(lo+hi)/2;
merge(a, lo, mid, hi); for (int i = 0; i < length; i++) { cout << a[i] << " "; } return0; }
intmerge(int a[], int na, int b[], int nb, int c[], int &nc){ int i=na-1; int j=nb-1; int k=0; while (j>=0 && i>=0) { if(a[i]==b[j]){ c[k]=a[i]; k++; i--; j--; } elseif(a[i]<b[j]){ j--; } else{ i--; } } nc=k; return nc; }
voiddisplay(int c[], int n){ for(int i=0;i<n;i++) cout<<c[i]<<" "; }
intmain(int argc, charconst *argv[]) { int a[4]={1,3,5,6}; int b[4]={2,3,6,8}; int c[4]; int na=4; int nb=4; int nc=merge(a,4,b,4,c,nc); display(c,nc);