这是使用Java编程语言进行合并排序的代码 如果有错误,它不会给我正确的输出。 有可能帮我解决吗?谢谢。
我想使用整数类型的数组。
import java.util.Arrays;
public class Excersize5 {
public void MergeSort(int[] Arr) {
int N = Arr.length;
if (N > 1) {
int Middle = (N) / 2;
int[] A1 = LeftElement(Arr);
int[] A2 = RightElement(Arr);
MergeSort(A1);
MergeSort(A2);
Merge(Arr, A1, A2);
}
}
public void Merge(int[] Result, int[] A1, int[] A2) {
int i = 0;
int j = 0;
for (int k = 0; k < Result.length; k++) {
if (A1[i] >= A2[j] || (i < A1.length &&
A1[i] <= A2[j])) {
Result[k] = A1[i];
i++;
} else {
Result[k] = A2[j];
j++;
}
}
}
public int[] LeftElement(int[] Total) {
int NL = Total.length / 2;
int[] L = new int[NL];
for (int p = 0; p < NL; p++) {
L[p] = Total[p];
}
return L;
}
public int[] RightElement(int[] Total) {
int NL = Total.length / 2;
int NR = Total.length - NL;
int[] R = new int[NR];
for (int q = 0; q < NR; q++) {
R[q] = Total[q];
}
return R;
}
public static void main(String[] args) {
Excersize5 e5 = new Excersize5();
int[] r = {5, 6, 7, 8, 1, 7};
e5.MergeSort(r);
System.out.print(r);
}
}
输出
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1 at practical4.Excersize5.Merge(Excersize5.java:22)at practical4.Excersize5.MergeSort(Excersize5.java:14)at practical4.Excersize5.MergeSort(Excersize5.java:13)at practical4.Excersize5.MergeSort(Excersize5.java:12)at practical4.Excersize5.main(Excersize5.java:55)Java结果:1 BUILD 成功(总时间:1秒)
答案 0 :(得分:0)
你可以使用Vector而不是让它更容易。这是因为你在数组长度之外调用的东西,所有这些,你永远不会返回你应该用某种方法做的数组结果