Java 合并排序算法代码

Java 合并排序算法代码,java,mergesort,Java,Mergesort,这是使用Java编程语言进行合并排序的代码。 如果有错误,它不会给我正确的输出。 能帮我解决吗?多谢各位 我想使用integer类型的数组 import java.util.Arrays; public class Excersize5 { public void MergeSort(int[] Arr) { int N = Arr.length; if (N > 1) { int Middle = (N) / 2;

这是使用Java编程语言进行合并排序的代码。
如果有错误,它不会给我正确的输出。 能帮我解决吗?多谢各位

我想使用integer类型的数组

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);

    }
}
导入java.util.array;
公开课练习5{
公共无效合并排序(int[]Arr){
int N=阵列长度;
如果(N>1){
中间整数=(N)/2;
int[]A1=左元素(Arr);
int[]A2=右元素(Arr);
合并排序(A1);
合并排序(A2);
合并(Arr、A1、A2);
}
}
公共无效合并(int[]结果,int[]A1,int[]A2){
int i=0;
int j=0;
for(int k=0;k=A2[j]| |(iA1[i]你可以只使用一个向量,这样做会更容易。这是因为你调用了数组长度以外的东西,所有这些东西,你永远不会返回数组结果,而你应该用某种方法返回数组结果

你可以发布输出吗?是的,我可以,这是线程“main”中的输出异常java.lang.ArrayIndexOutofBounds异常:1在practical4.Excersize5.Merge(Excersize5.java:22)在practical4.Excersize5.MergeSort(Excersize5.java:14)在practical4.Excersize5.MergeSort(Excersize5.java:13)在practical4.Excersize5.java:12)在practical4.Excersize5.main(Excersize5.java:55)java结果:1构建成功(总时间:1秒)请格式化您的代码。这是一个家庭作业问题!这不应该在这里。我将给您一个提示:源数组的“拆分”实际上是通过选取索引的子范围来实现的。您不应该在拆分步骤中实际创建新数组。您总共应该只有两个数组:原始数组和一个临时数组来保存merg教育价值观。