// scrambled needs to be sorted, sorted is the target int array merge_segment merge_sort_impl(int *scrambled, int *sorted, int from, int to) { if (to-1 > from) { merge_segment left = merge_sort_impl(scrambled, sorted, from, (to+from)/2); merge_segment right = merge_sort_impl(scrambled, sorted, (to+from)/2, to); merge_combine(scrambled, sorted, left, right); } merge_segment n = {from,to}; return n; }
void merge_sort_impl(int arr[], int aux[], int lo, int hi) { if (lo >= hi) { return; } int mid = (lo + hi) / 2; merge_sort_impl(arr, aux, lo, mid); merge_sort_impl(arr, aux, mid + 1, hi); if (arr[mid + 1] > arr[mid]) { merge(arr, aux, lo, mid, hi); } }
void merge_sort(int arr[], const int N) { int * aux; aux = (int *)malloc(sizeof(int) * N); merge_sort_impl(arr, aux, 0, N - 1); free(aux); }
void merge_sort(int *scrambled, int from, int to){ int sorter[to-from]; merge_sort_impl(scrambled, sorter, from, to); }