1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include<iostream> using namespace std;
void mergeAdd(int* arr,int left,int mid,int right,int* temp) {
int i = left; int j = mid; int k = left;
while (i < mid && j <= right) { if (arr[i] < arr[j]) { temp[k++] = arr[i++]; } else { temp[k++] = arr[j++]; } } while(i< mid) { temp[k++] = arr[i++]; } while (j <= right) { temp[k++] = arr[j++]; } memcpy(arr + left, temp+left, sizeof(int) * (right - left + 1)); }
void print(int* arr,int len) { for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; }
void mergeSort(int* arr,int left,int right,int* temp) { int mid = 0; if (left < right) { mid = left + (right - left) / 2; mergeSort(arr, left, mid, temp); mergeSort(arr, mid + 1, right, temp); mergeAdd(arr, left,mid+1, right, temp); } } int main(void) { int arr[] = { 3,1,4,5,5,4,1,3}; int len = sizeof(arr) / sizeof(arr[0]); int mid = len / 2; int* temp = new int[len]; mergeSort(arr, 0, len - 1, temp); mergeAdd(arr, 0,mid, len - 1,temp); print(arr, len); return 0; }
|