Java 快速排序故障排除
我一直在尝试让我的Mergesort方法工作,但它给了我一些时髦的输出Java 快速排序故障排除,java,sorting,system,mergesort,Java,Sorting,System,Mergesort,我一直在尝试让我的Mergesort方法工作,但它给了我一些时髦的输出 // mergesort method // recursively sorts the array by breaking into small sub-arrays and then merging public static int[] mergeSort(int[] nums){ int halfwayAndOne = (nums.length / 2); int a = 0, b = 0;
// mergesort method
// recursively sorts the array by breaking into small sub-arrays and then merging
public static int[] mergeSort(int[] nums){
int halfwayAndOne = (nums.length / 2);
int a = 0, b = 0;
if (nums.length <= 1)
return nums;
else{
int[] l = new int[nums.length / 2];
int[] r = new int[nums.length - l.length];
for (int i = 0; i < l.length; i++)
l[i] = nums[i];
for (int j = 0; j < nums.length - l.length; j++){
r[j] = nums[halfwayAndOne];
halfwayAndOne++;
}
for (int n = 0; n < nums.length; n++){
if (a < l.length && b < r.length) {
if (l[a] < r[b]) {
nums[n] = l[a];
a++;
} else {
nums[n] = r[b];
b++;
}
}
else if (a == l.length)
nums[n] = r[b];
else
nums[n] = l[a];
}
mergeSort(l);
mergeSort(r);
printArr(l);
printArr(r);
return nums;
}
}
// method to print out the array
public static void printArr(int[] arr){
System.out.println(Arrays.toString(arr));
}
第一个数组是原始数组,输出应该从最小到最大排序
编辑:我的问题是我的程序哪里不工作了,虽然这是不言自明的,很抱歉。在您将
l
和r
合并到nums
的时候,是否对l
和r
进行了排序?很抱歉听到这个消息。您做了哪些疑难解答?你有调试器吗?是的,我理解他机智的回答。我认为这是不言自明的。正是问题所在,我没有在for循环之前递归地合并它们以重新加入它们。非常感谢你!
[4, 0, 10, 15, 2, 1, 8, 9, 20, 3, 5]
[4]
[0]
[15]
[2]
[10]
[2, 15]
[0, 4]
[10, 15, 15]
[8]
[9]
[1]
[8, 9]
[3]
[5]
[20]
[3, 5]
[1, 8, 8]
[3, 5, 20]
[4, 0, 10, 10, 10]
[1, 8, 9, 20, 20, 20]
[1, 4, 0, 8, 9, 10, 15, 2, 20, 20, 20]