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
| void merge(int* arr, int left, int mid, int right){ int* temp = new int[right-left+1]; int i = left, j = mid+1, k = 0; 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++]; for(int i=left, k=0;i<=right;i++,k++){ arr[i] = temp[k]; } delete[] temp; }
void merge_sort(int* arr, int left, int right){ if(left < right){ int mid = (left + right) / 2; merge_sort(arr, left, mid); merge_sort(arr, mid+1, right); merge(arr, left, mid, right); } }
|