前后两个有序数组和并为一个有序数组

  1. void mergearray(int a[], int first, int mid, int last, int temp[])  
  2. {  
  3.     int i = first, j = mid + 1;  
  4.     int m = mid,   n = last;  
  5.     int k = 0;  
  6.       
  7.     while (i <= m && j <= n)  
  8.     {  
  9.         if (a[i] <= a[j])  
  10.             temp[k++] = a[i++];  
  11.         else  
  12.             temp[k++] = a[j++];  
  13.     }  
  14.       
  15.     while (i <= m)  
  16.         temp[k++] = a[i++];  
  17.       
  18.     while (j <= n)  
  19.         temp[k++] = a[j++];  
  20.       
  21.     for (i = 0; i < k; i++)  
  22.         a[first + i] = temp[i];  
  23. }  
  24. void mergesort(int a[], int first, int last, int temp[])  
  25. {  
  26.     if (first < last)  
  27.     {  
  28.         int mid = (first + last) / 2;  
  29.         mergesort(a, first, mid, temp);    //左边有序  
  30.         mergesort(a, mid + 1, last, temp); //右边有序  
  31.         mergearray(a, first, mid, last, temp); //再将二个有序数列合并  
  32.     }  
  33. }  
  34.   
  35. bool MergeSort(int a[], int n)  
  36. {  
  37.     int *p = new int[n];  
  38.     if (p == NULL)  
  39.         return false;  
  40.     mergesort(a, 0, n - 1, p);  
  41.     delete[] p;  
  42.     return true;  
  43. }