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