2017-04-11 1 views
1

私のプログラムに問題があります。要素の数が2^nと異なる場合、私のアルゴリズムはマージしたくありません。それは、それが17 マージソート - ソートのみ2^n個の要素数

18に機能

void mergeSort(int arr[], int arrSort[], int first, int mid, int last) { 
    int from = first; 
    int to = mid; 
    for (int i = first; i<last; i++) { 
     if ((arr[from] <= arr[to] && from<mid) || to >= last) { 
      arrSort[i] = arr[from]; 
      from++; 
     } else if ((arr[to]<arr[from] && to<last) || from >= mid) { 
      arrSort[i] = arr[to]; 
      to++; 
     } 
    } 
    for (int i = first; i<last; i++) 
     arr[i] = arrSort[i]; 
} 

void mergeSortIter(int array[], int size) { 
    int *a = new int[size]; 
    for (int i = 1; i <= size; i *= 2) { 
     showArray(array, size); 
     for (int j = i; j <= size; j += (2 * i)) 
      mergeSort(array, a, j - i, j, min((j + i), size)); 
    } 
} 

コードの残りの部分から、その後1から16にPOSのために働く、1,3,5,6,7,8,9,10,11,12,13,14,17,19,20,22,2,18,を返す入力13 5 10 8 6 22 11 3 12 20 7 9 14 17 19 1 2 18ためmerging.Forインスタンスの前に操作を行います

https://pastebin.com/2ugS5ZpZ

はあなたが書く必要があり、それをテストするにはmi 6 [ENTER](6要素の数である)その後、たとえば5 6 8 2 1 3のためのスペースを持つ要素は[ENTER]

+0

問題の1つは、インデックスが2の累乗を通過する最終的なforループです。同様に深い設計上の問題があるかもしれません。 – jwimberley

答えて

0

は問題は非常に些細でした。私は最終的な配列を印刷していませんでした...

関連する問題