2016-01-21 5 views
0

Я пытаюсь написать базовое слияние сверху вниз, но массив не полностью отсортирован после завершения кода. Я попытался отладить его, но вся рекурсия затрудняет определение. Я также попытался сравнение моего кода других примеров сортировки слияния, но у меня не было никакой удачи в поиске каких-либо различийНеверная реализация Mergesort

private void mergeSort(int[] arr) { 
     int[] aux = new int[arr.length]; 
     sort(arr, aux, 0, arr.length - 1); 
    } 

    private void sort(int[] arr, int[] aux, int lo, int hi) { 
     if(hi <= lo) 
      return; 
     int mid = lo + ((hi - lo)/2); 
     sort(arr, aux, lo, mid); 
     sort(arr, aux, mid + 1, hi); 
     merge(arr, aux, lo, mid, hi); 
    } 

    private void merge(int[] arr, int[] aux, int lo, int mid, int hi) { 
     for(int i = lo;i <= hi;i++) 
      aux[i] = arr[i]; 

     int x = lo; 
     int y = mid + 1; 
     for(int i = lo; i <= hi; i++){ 
      if(x > mid)    arr[i] = aux[y++]; 
      else if(y > hi)   arr[i] = aux[x++]; 
      else if(aux[y] < aux[i]) arr[i] = aux[y++]; 
      else      arr[i] = aux[x++]; 
     } 
    } 

ответ

2

Изменить

else if(aux[y] < aux[i]) arr[i] = aux[y++]; 

в

else if(aux[y] < aux[x]) arr[i] = aux[y++]; 

примечание Окс [x]

+0

Я бы поднял верх, если бы мог, спасибо! – user3618426