[英]Cant get my mergeSort working after several hours
*嘿。 所以我的mergeSorting遇到了问题。 我尝试了不同的方法和方法,但无法使其正常工作。 我了解mergeSorting的原理,所以没有问题。 这是我的方法:
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;
}
这就是我测试mergeSort的方式。
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));
if (end - start < 2)
是错的。 它应该是
if (end - start > 2)
一些提示: CopyArray
可以由System.arraycopy
替换...另外还要重新考虑: if (end - start < 2)
我建议您检查一下Thomas H. Cornmen撰写的《算法简介》,而不是修改代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.