在java中实现合并排序时出错?

时间:2015-08-25 17:44:39

标签: java algorithm sorting

我在java中使用以下代码进行合并排序,但在输出中我得到输出: -
0 0 0 0 0 0
我在过去两个小时里尝试过调试它。我在哪里错了?

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
我认为分区有问题!

1 个答案:

答案 0 :(得分:3)

使用调试器我可以看到

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