私はmergesortプログラムをJavaで書こうとしています。残念ながら私の実装では、コードの結果としてゼロのリストが返されます。私はすべてが論理的で、私に正しい順序であると思われるので、キンクを見つけることができませんでした。誰かが私にこの不具合を見つけるのを助けることができれば、私は感謝します。次のようにJavaで再帰的なmergesortの小さなねじれ
コードは次のとおりです。
package com.company;
public class Main {
public static void main(String[] args) {
int[] array = {35,43,21,4,23,1,13,44};
System.out.println("initial array is equal to:");
for (int data:array) {
System.out.println(data);
}
mergeSort(array, new int[array.length], 0, array.length-1);
System.out.println("Sorted array is equal to: ");
for (int s:array) {
System.out.println(s);
}
// arr = {35,43,21,4,23,1,13,44}
}
public static void mergeSort(int[] array,int[] secondaryArray,int leftStart, int rightEnd){
if(leftStart >= rightEnd){
return;
}
int midPoint = (leftStart + rightEnd)/2;
//sorting the left array
mergeSort(array, secondaryArray, leftStart, midPoint);
//sorting the right array
mergeSort(array, secondaryArray, midPoint+1, rightEnd);
//merging the sorted left and right array
mergeHalves(array, secondaryArray,leftStart, rightEnd);
}
public static void mergeHalves(int[] array, int[] secondaryArray, int leftStart, int rightEnd){
int leftEnd = (leftStart + rightEnd)/2;
int rightStart = leftEnd + 1;
int index = 0;
while ((leftStart <= leftEnd) && (rightStart <= rightEnd)){
if(array[leftStart] <= array[rightStart]){
secondaryArray[index] = array[leftStart];
leftStart++;
}else {
secondaryArray[index] = array[rightStart];
rightStart++;
}
index++;
}
System.arraycopy(array,rightStart,secondaryArray,index,rightEnd-rightStart+1);
System.arraycopy(array,leftStart,secondaryArray,index,leftEnd-leftStart+1);
System.arraycopy(secondaryArray,0,array,0,secondaryArray.length);
}
}
あなたは、いくつかのデバッグを実行する必要があります。
はここmergeHalvesの完全なコードです。 –