在java中实现归并排序错误



我在java中做了以下代码用于合并排序,但在输出中我得到了输出:-


在过去的两个小时里,我一直在调试它。我哪里出错了?

public class MergeSort {
    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-1;i++)
            {left[i]=a[i];}
        for(int i=mid;i<n-1;i++)
            {right[i-mid]=a[i];}
        Mergesort(left);
        Mergesort(right);
        merge(left,right,a);
    }
    public static void merge(int[]x,int[] y,int[] z){
        int p=x.length;
        int q=y.length;
        int i=0;int j=0;int k=0;
        while(i<p&&j<q){
            if(x[i]<=y[j])
                z[k++]=x[i++];
            else
                z[k++]=y[j++];
        }
        while(i<p) z[k++]=x[i++];
        while(j<q) z[k++]=y[j++];

    }

    public static void main(String[] args) {
        int[] arr={9,10,8,5,1,0};
        Mergesort(arr);
        for(int l=0;l<arr.length;l++)
        {System.out.println(arr[l]);}

    }
}

输出为0 0 0 0 0 0
我认为分区有问题!

使用调试器我可以看到

for(int i=0;i<mid-1;i++)

for(int i=mid;i<n-1;i++)
应该

for(int i = 0; i < mid; i++)

for(int i = mid; i < n; i++)

你的代码不复制最后一个元素最终你只剩下0

最新更新