MergeSort で問題が発生しました。配列を並べ替えた後、すべてのパスではなく、完全に並べ替えられた配列のみを出力するようにします。私のコードは以下です。配列がソートされたように見えた後、printArray(intArray) を実行しています。多分私はそれを間違った場所に置いていますか?最後の mergesortComparisons 関数で確認できます。
private static int merge(int[] intArray, int first, int n1, int n2) {
int[] temp = new int[n1+n2];
int copied = 0, copied1 = 0, copied2 = 0;
while((copied1 < n1) && (copied2 < n2)){
if (intArray[first + copied1] < intArray[first + n1 + copied2])
temp[copied++] = intArray[first + copied1++];
else
temp[copied++] = intArray[first + n1 + copied2++];
}
while(copied1 < n1)
temp[copied++] = intArray[first + copied1++];
while(copied2 < n2)
temp[copied++] = intArray[first + n1 +copied2++];
for(int i = 0; i < n1+n2; i++) {
numComparisons++;
intArray[first + i] = temp[i];
}
return first;
}
public static int mergeSortComparisons(int[] intArray, int first, int last){
int n1, n2;
if (last > 1){
n1 = last/2;
n2 = last - n1;
mergeSortComparisons(intArray, first, n1);
mergeSortComparisons(intArray, first + n1, n2);
merge(intArray, first, n1, n2);
}
printArray(intArray);
return numComparisons;
}