私のJavaの宿題のために、私は再帰的なマージソートクラスを書くのに苦労しています。現在、再帰を開始する3つのメソッド「ドライバ」メソッド、再帰的なmergeSort
メソッド、およびmerge
メソッドがあります。どのような変数を変更するかによって、出力はすべて0の配列か、元の配列と同じ順番になります。唯一のことは、元のmergeSort
メソッドは1つの配列で取る必要があり、merge
メソッドは何も返すことができません。多くの助けを借りて助けてくださいマージソートの問題
import java.util.Arrays;
public class merge2 {
public static void main(String[] args){
int []a={22,45,1,4,89,7,0};
mergeSort(a);
System.out.println(Arrays.toString(a));
}
public static void mergeSort(int [] a){
mergeSort(a,0,a.length-1);
}
public static void mergeSort(int []a, int beg,int end){
if(beg<end){
int mid=(beg+end)/2;
mergeSort(a,beg,mid);
mergeSort(a,mid+1,end);
merge(a,beg,mid,end);
}
}
private static void merge(int []a, int beg, int middle, int end){
int [] d=new int[a.length];
int mid=middle+1; //start of second half of array
for(int i=0;i<d.length;i++){
if(beg<=middle && mid<=end){
if(a[beg]<=a[mid]) {
d[i]=a[beg];
beg++;
} else if(a[mid]<=a[beg]){
d[i]=a[mid];
mid++;
}
}else if(beg>middle){
d[i]=a[mid];
mid++;
}else if(mid==a.length){
d[i]=a[beg];
beg++;
}
}
for(int w=0;w<d.length;w++){
a[w]=d[w];
}
}
}
は、あなたは間違って行くように思われる場所を確認するために、デバッガでコードをステップ実行しようとしたことがあり、次の? – millimoose