Java 合并排序示例
我是Java新手,我尝试过编写一个合并排序程序。 MergeSort.java程序如下:-Java 合并排序示例,java,mergesort,Java,Mergesort,我是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
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]);
}
}
但是,预期的输出是12369
有谁能帮我指出我正在犯的错误并试着帮我修复它吗?我已经试过在Eclipse上调试它,但是没有发现错误。
谢谢您确定在函数合并中是这样说的吗:
MergeSort(b, left, right);
似乎应该是:
MergeSort(a, left, right);
你确定你在函数
合并中的意思是:
MergeSort(b, left, right);
似乎应该是:
MergeSort(a, left, right);
你确定你在函数合并中的意思是:
MergeSort(b, left, right);
似乎应该是:
MergeSort(a, left, right);
你确定你在函数合并中的意思是:
MergeSort(b, left, right);
似乎应该是:
MergeSort(a, left, right);
我必须通过已经拆分的数组而不是原来的数组。@ NexBee,我建议您为变量使用更好的名称。当然,请考虑我下一个代码的建议:)NeBee还试图避免使用类名作为方法的名称,以避免混淆和代码可读性。在您的案例“MergeSort”@Newbie遵循@dilip
建议的情况下,您的方法名称应该是split
和merge
。也要检查小写。我必须通过已经拆分的数组而不是原来的数组。@ NexBee我建议你为变量使用更好的名称。当然会考虑下一个代码的建议:)NeBee还试图避免使用类名作为方法的名称,以避免混淆和代码可读性。在您的案例“MergeSort”@Newbie遵循@dilip
建议的情况下,您的方法名称应该是split
和merge
。也要检查小写。我必须通过已经拆分的数组而不是原来的数组。@ NexBee我建议你为变量使用更好的名称。当然会考虑下一个代码的建议:)NeBee还试图避免使用类名作为方法的名称,以避免混淆和代码可读性。在您的案例“MergeSort”@Newbie遵循@dilip
建议的情况下,您的方法名称应该是split
和merge
。也要检查小写。我必须通过已经拆分的数组而不是原来的数组。@ NexBee我建议你为变量使用更好的名称。当然会考虑下一个代码的建议:)NeBee还试图避免使用类名作为方法的名称,以避免混淆和代码可读性。在您的案例“MergeSort”@Newbie遵循@dilip
建议的情况下,您的方法名称应该是split
和merge
。还要检查小写。为什么合并排序
将三个数组
作为形式参数?只需要一个要排序的数组
,以及两个int
值来跟踪低
和高
数组
的末端<代码>合并排序
在合并排序
方法中创建一个临时数组,在对元素进行排序后,将该临时数组
的内容复制到原始数组
,这与快速排序
不同,为什么合并排序
使用三个数组
作为形式参数?只需要一个要排序的数组
,以及两个int
值来跟踪低
和高
数组
的末端<代码>合并排序
在合并排序
方法中创建一个临时数组,在对元素进行排序后,将该临时数组
的内容复制到原始数组
,这与快速排序
不同,为什么合并排序
使用三个数组
作为形式参数?只需要一个要排序的数组
,以及两个int
值来跟踪低
和高
数组
的末端<代码>合并排序
在合并排序
方法中创建一个临时数组,在对元素进行排序后,将该临时数组
的内容复制到原始数组
,这与快速排序
不同,为什么合并排序
使用三个数组
作为形式参数?只需要一个要排序的数组
,以及两个int
值来跟踪低
和高
数组的末端<代码>合并排序在合并排序
方法中创建一个临时数组,在对元素进行排序后,然后将该临时数组的内容复制到原始数组
,这与快速排序
不同。