java中的合并排序

java中的合并排序,java,mergesort,Java,Mergesort,这段代码是一个简单的按分治类推的合并排序。我得到一个未排序的数组作为输出,它与输入数组相同。请指出此代码中的错误: import java.util.*; class Merge { public static void main(String[] args) { int n,i; Scanner sc = new Scanner(System.in); System.out.println("enter size of array");

这段代码是一个简单的按分治类推的合并排序。我得到一个未排序的数组作为输出,它与输入数组相同。请指出此代码中的错误:

import java.util.*;
class Merge {
    public static void main(String[] args) {
        int n,i;
        Scanner sc = new Scanner(System.in);
        System.out.println("enter size of array");
        n = sc.nextInt();
        int b[] = new int[n];
        System.out.println("enter  array");
        for (i=0;i<n;i++) {
            b[i] = sc.nextInt();
        }
        System.out.println("sorted array");
        int c[] = sort(b);
        for (i=0;i<n;i++) {
            System.out.println(c[i]);
        }  
    }
    static int[] sort(int[] a) {   
        int i;
        int l = a.length;
        if (l<2) {
            return a;
        }
        int mid = l/2;
        int left[] = new int[mid];
        int right[] = new int[l - mid];
        for (i=0;i<mid;i++) {
            left[i] = a[i];
        }
        for (i=mid;i<l;i++) {
            right[i-mid] = a[i];
        }
        sort(left);
        sort(right);
        merge(left,right,a);
        return a;
    }
    static void merge(int[] left , int[] right , int[] a) {
        int p=0,q=0,r=0;
        while (p<left.length && q<right.length) {
            if (left[p]<=left[q]) {
                a[r] = left[p];
                p++;
            } else {
                a[r] = right[q];
                q++;
            }
            r++;
        }
        while (p<left.length) {
            a[r] = left[p];
            p++;
            r++;
        }
        while (q<right.length) {
            a[r] = right[q];
            q++;
            r++;
        }
    }
}
import java.util.*;
类合并{
公共静态void main(字符串[]args){
int n,i;
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入数组大小”);
n=sc.nextInt();
int b[]=新的int[n];
System.out.println(“输入数组”);

对于(i=0;i在合并方法中,您的条件有问题

         if (left[p]<=left[q]) {

if(left[p]通过调试器运行它。我建议您使用调试器并尝试自己解决它。这将对您有更多帮助,您也将学到一些有用的东西。
          if (left[p]<=right[q]) {