// // main.cpp // mergesort // // Created by lingnan on 10/21/15. // Copyright (c) 2015 lingnan. All rights reserved. // #include <iostream> using namespace std; void merge(int arr[], int left, int mid, int right){ int n1 = mid - left +1; int n2 = right - mid; int a1[n1], a2[n2]; for(int i=0; i<n1; i++){ a1[i] = arr[left+i]; } for(int j=0; j<n2; j++){ a2[j] = arr[mid+j+1]; } int c_a= 0; int c_b = 0; int c = left; while(c_a <n1 && c_b <n2){ if(a1[c_a] <= a2[c_b]){ arr[c++] = a1[c_a++]; }else{ arr[c++] = a2[c_b++]; } } while(c_a <n1){ arr[c++] = a1[c_a++]; } while(c_b <n2){ arr[c++] = a2[c_b++]; } } void mergesort(int arr[], int left, int right){ if(left < right){ int mid = (right - left)/2 + left; mergesort(arr, left, mid); mergesort(arr, mid+1, right); merge(arr, left, mid, right); } } void printArray(int arr[], int n){ cout<<"The final result after mergesort is:"<<endl; for(int i=0; i<n;i++) { cout<< arr[i] <<" "; } } int main(int argc, const char * argv[]) { int arr[] = {3,21,5,3,2,5,3,6,454,7,3,63,4,645}; int n = sizeof(arr)/sizeof(arr[0]); mergesort(arr, 0, n-1); printArray(arr, n); return 0; }