public static int[] mergeArray(int[] a, int[] b) {
int[] result = new int[a.length + b.length];
int i = 0; // to index array a
int j = 0; // to index array b
for (int k = 0; k < result.length; k++) {
if(a.length == i+1) {
result[k] = b[j-1];
j++;
}else if(b.length == j+1) {
result[k] = a[i-1];
i++;
}else if(a[i] > b[j]) {
result[k] = b[j];
j++;
}else if(a[i] < b[j]) {
result[k] = a[i];
i++;
}
}
return result;
}
// this method does the same thing as sortArray but much more efficiently
// it uses meregeArray
public static int[] mergeSortArray(int[] poop) {
int[] p1 = new int[poop.length/2];
int[] p2 = new int[poop.length-p1.length];
for (int i = 0; i<p1.length; i++) {
p1[i] = poop[i];
}
for (int i = 0; i<p2.length; i++) {
p2[i] = poop[i+p1.length - 1];
}
sortArray(p1);
sortArray(p2);
return mergeArray(p1, p2);
}
public static void main(String[] args) {
int[] poop = new int[] {1, 3, 5, 7, 9, 2, 4, 6, 8, 10};
String s = "";
for(int i : mergeSortArray(poop)){
s += i + ", ";
}
System.out.println(s);
}
代码接受一个int []并将其转换为两个,然后对其进行排序,但错误似乎在输出中,如下所示,它输出两个6,这是奇怪的,我不确定,任何非常感谢帮助:)
这是输出: 1,2,3,4,5,6,7,6,8,9,
感谢所有帮助的人:)
答案 0 :(得分:1)
首先,你并不比宇宙中的其他人聪明。内部Java使用mergeSort和其他有效的算法,例如在source code of java.util.Arrays
中可以看到其次,我相信行中有一个错误
p2[i] = poop[i+p1.length - 1]; // bad
p2[i] = poop[i+p1.length]; // good
由于这个错误,错误地将数组拆分为从输出中删除10
第三,mergeArray
中存在一个错误,应该是
if(a.length == i) {
result[k] = b[j];
j++;
} else if(b.length == j) {
result[k] = a[i];
i++;
这是重复“6”
的结果正如TDG所说,学习调试代码是一项至关重要的技能,你应该学习。