我是 Java 新手,我尝试编写一个合并排序程序。 MergeSort.java 程序如下:-
public class MergeSort {
public static int b[] = {6,2,3,1,9};
public void MergeSort(int a[],int left[], int right[]) {
int i = 0,j = 0,k = 0;
int l = left.length;
int r = right.length;
int v = a.length;
while ( i < l && j < r) {
if( left[i] < right[j]) {
a[k] = left[i] ;
i++;
} else {
a[k] = right [j];
j++;
}
k++;
}
while ( i < l ) {
a[k] = left[i];
k++;
i++;
}
while ( j < r ) {
a[k] = right[j];
k++;
j++;
}
}
public void Merge(int a[], int length) {
int n = 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 ; i++) {
left[i] = a[i];
}
for (int i = mid ; i <n ; i++) {
right[i-mid] = a[i];
}
Merge(right,n-mid);
Merge(left,mid);
MergeSort(b, left, right);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MergeSort ms = new MergeSort();
ms.Merge(b,b.length);
for(int i=0 ; i < b.length ; i++)
System.out.println(b[i]);
}
}
当我运行这个程序时,我得到的输出是
3
1
6
2
9
但是,预期输出是 1 2 3 6 9
任何人都可以帮我指出我犯的错误并尝试帮助我修复它。我尝试在 Eclipse 上调试它,但无法发现错误。 谢谢
最佳答案
您确定您在函数Merge
中表示的是这个意思吗:
MergeSort(b, left, right);
看起来应该是:
MergeSort(a, left, right);
关于java - 归并排序示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25830101/