示例#1
0
// 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;
}
示例#2
0
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);
    }
}
示例#3
0
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);
}
示例#4
0
void merge_sort(int *scrambled, int from, int to){
  int sorter[to-from];
  merge_sort_impl(scrambled, sorter, from, to);
}