*嘿。所以我有我的mergeSorting問題。我嘗試過不同的方法和方法,但無法讓它工作。我理解mergeSorting的原理,所以在那裏沒有問題。 這是我的我的方法:幾個小時後無法讓我mergeSort工作
public static void TopDownMergeSort(int[] left, int[] right, int n){
TopDownSplitMerge(left, 0, n, right);
}
public static void CopyArray(int[] right, int start, int end, int[] left){
for (int i = start;i < end; i++){
right[i] = left[i];
}
}
public static void TopDownSplitMerge(int[] left, int start, int end, int[] right){
if (end - start < 2){
int middle = (end + start)/2;
TopDownSplitMerge(left, start, middle, right);
TopDownSplitMerge(left, middle, end, right);
TopDownMerge(left, start, middle, end, right);
CopyArray(right, start, end, left);
}
}
public static void TopDownMerge(int[]left, int start, int middle, int end, int[]right){
int i1 = start, i2 = middle;
for (int i = start; i < end; i++){
if (i1 < middle && (i2 >= end || left[i1] <= left[i2])){
right[i] = left[i1++];
}
else {
right[i] = left[i2++];
}
}
}
public static int[] mergeSort(int[] in) {
int[] arr = in.clone();
int[] temp = in.clone();
TopDownSplitMerge(arr,0,arr.length,temp);
return arr;
}
這也是我如何測試歸併。
int[] list = {2,5,8,6,9,7,3,4};
System.out.println("Before mergesort: "+Arrays.toString(list));
int[] ne = SortingAlgorithms.mergeSort(list);
System.out.println("After mergesort: "+Arrays.toString(ne));
預期產量是多少?什麼是實際? – eugene82
預期結果當然是一個排序數組。 其結果是:合併之前:[2,5,8,6,9,7,3,4] 合併後:[2,5,8,6,9,7,3,4] – jabbeboy
我會建議使用列表而不是數組並實際分割列表。與索引雜耍是容易出錯的。 – ilmirons