在阅读合并排序后,我已经编写了下面的Java代码。运行代码时没有错误,但合并排序不对数组进行排序。它只返回原始未排序的数组。我不能为我的生活找出问题所在。我很感激任何线索。
public class mergeSort {
public void mergeSort(int array[], int n){
if(n<2) return;
int m=n/2;
int left[]=new int[m];
int right[]=new int[n-m];
int i;
for(i=0; i<m;i++){
left[i]=array[i];
}
for( i=m; i<n;i++){
right[i-m]=array[i];
}
printArray(left);
printArray(right);
mergeSort(left, m);
mergeSort(right, n-m);
merge(array, left, m, right, m-n);
}
private void merge(int[] array, int[] left, int leftCount, int[] right, int rightCount) {
int i=0,j=0,k=0;
while(i<leftCount && j< rightCount){
if(left[i]<=right[j]){
array[k]=left[i];
i++;
k++;
}else{
array[k]=right[j];
j++;
k++;
}
}
while(i<leftCount){
array[k]=left[i];
i++;
k++;
}
while(j<rightCount){
array[k]=right[j];
j++;
k++;
}
}
static void printArray(int arr[])
{
int n = arr.length;
for (int i=0; i<n; ++i)
System.out.print(arr[i] + " ");
System.out.println();
}
public static void main(String[] args){
int a[]={3,2,1,7,9,8};
printArray(a);
mergeSort m=new mergeSort();
m.mergeSort(a, a.length);
printArray(a);
}
}
答案 0 :(得分:0)
传递给merge方法的leftCount和rightCount是错误的。
相反,不要传递,而是在merge方法中计算。我尝试使用以下更改代码,它完全正常。
merge(array, left, right);
...
private void merge(int[] array, int[] left, int[] right) {
int i=0,j=0,k=0;
int leftCount= left.length;
int rightCount = right.length;