我试图建立一个合并排序,但最终出现错误

时间:2017-10-09 23:45:50

标签: sorting merge

对于类型合并,方法mergeSort(int[])未定义。这是我面临的错误。任何人都可以指出我的错吗?我可能会犯一个语法错误,请指出我犯的错误。

public class merge {
    public static mergeSort(int[] a) {
        int n = a.length;
        if (n < 2) {
            return(a[]);
        }
        int mid = n / 2;
        int left[] = new int[mid];
        int left[] = new int[n - mid];

        for (int i = 0; i < mid; i++) {
            left[i] = a[i];
        }

        for (int i = mid; i < n; i++) {
            right[i - mid] = a[i];
        }

        mergeSort(left[]);
        mergeSort(right[]);
        mmerge(left[], right[], A);
    }

    public static void mmerge(int[] l, int[] r, int[] array) {
        int len1 = l.length();
        int len2 = r.length();
        int i = 0;
        int j = 0;
        int k = 0;
        while (i < len1 && j < len2) {
            if (l[i] <= r[j]) {
                array[k]=l[i];
                k++;
                i++;
            } else {
                array[k] = r[j];
                k++;
                j++;
            }
        }
        while (i < len1) {
            array[k] = l[i];
            k++;
            i++;
        }
        while (j < len2) {
            array[k] = r[j];
            k++;
            j++;
        }
    }

    public static void main(String args[]) {
        int[] arr = { 4, 6, 2, 9, 1, 7, 3 };
        mergeSort(arr);

        for (int p = 0; p < arr.length; p++) {
            System.out.print(arr[p]+" ");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

试试这个

public class merge {
    public static void mergeSort(int[] a) {
        int n=a.length;
        if(n<2) {
            return;
        }
        int mid=n/2;
        int left[]=new int[mid];
        int right[]=new int[n-mid];

        for (int i=0;i<mid;i++) {
            left[i]=a[i];
        }

        for (int i=mid;i<n;i++) {
            right[i-mid]=a[i];
        }

        mergeSort(left);
        mergeSort(right);
        mmerge(left,right,a);
    }

    public static void mmerge(int[] l,int[] r,int[] array) {
        int len1=l.length;
        int len2=r.length;
        int i=0;
        int j=0;
        int k=0;
        while(i<len1 && j<len2) {
            if(l[i]<=r[j]) {
                array[k]=l[i];
                k++;
                i++;
            }else {
                array[k]=r[j];
                k++;
                j++;
            }
        }
        while(i<len1) {
            array[k]=l[i];
            k++;
            i++;
        }
        while(j<len2) {
            array[k]=r[j];
            k++;
            j++;
        }
    }

    public static void main(String args[]) {

        int[] arr={4,6,2,9,1,7,3};
        mergeSort(arr);

        for(int p=0;p<arr.length;p++) {
            System.out.print(arr[p]+" ");
        }

    }
}