Java 什么';这是不对的;合并排序;?
我在课堂上复制了一个mergeSort代码,你能帮我找到错误吗 当我运行使用Java 什么';这是不对的;合并排序;?,java,sorting,mergesort,Java,Sorting,Mergesort,我在课堂上复制了一个mergeSort代码,你能帮我找到错误吗 当我运行使用mergeSort的main时,程序进入无限循环,但不显示任何错误。我试着在调试模式下运行,但我不是很专业,也没有发现问题所在。但是我认为错误在mergeSort(int[]v,int-inf,int-sup)递归中 public class CopyOfSortMethods { private static void merge(int[] v, int inf, int med, int sup) { i
mergeSort
的main时,程序进入无限循环,但不显示任何错误。我试着在调试模式下运行,但我不是很专业,也没有发现问题所在。但是我认为错误在mergeSort(int[]v,int-inf,int-sup)
递归中
public class CopyOfSortMethods {
private static void merge(int[] v, int inf, int med, int sup) {
int aux[] = new int[v.length];
int i = inf;
int j = med + 1;
int k = inf;
while ((i <= med) && (j <= sup)) {
if (v[i] < v[j]) {
aux[k] = v[i];
i++;
k++;
} else {
aux[k] = v[j];
j++;
k++;
}
}
while (i <= med) {
aux[k] = v[i];
i++;
k++;
}
while (j <= sup) {
aux[k] = v[j];
j++;
k++;
}
for (i = 0; i <= sup; i++) {
v[i] = aux[i];
}
}
public static void mergeSort(int[] v, int inf, int sup) {
int med;
while (inf < sup){
med = (inf + sup)/2;
mergeSort(v, inf, med);
mergeSort(v, med + 1, sup);
merge(v, inf, med, sup);
}
}
public static void mergeSort(int[] v) {
if(v!=null) {
mergeSort(v, 0, v.length - 1);
}
}
}
公共类CopyOfSortMethods{
私有静态无效合并(int[]v,int-inf,int-med,int-sup){
int aux[]=新的int[v.length];
int i=inf;
int j=med+1;
int k=inf;
while((正如Maverik指出的,问题在于mergeSort()
中的while
循环
inf
和sup
从未被修改,因此inf
始终小于sup
。循环从未终止。合并排序中的问题(基于注释):
在mergeSort
方法中,您在循环中递归调用mergeSort
,并且从不更改inf
和sup
的值。改为if
if (inf < sup) {
//code goes here...
}
在调试器中单步执行代码时,您看到了什么?演示您的问题的最简单示例是什么?这是因为在Java中,变量是通过值传递的,而不是通过引用传递的。因此inf和sup在mergeSort函数中保持不变。@maverik您的意思是什么?当我在调试模式下运行时,我注意到mergeSort while应该结束s、 它从第二个递归继续运行。@LuiggiMendoza,我的意思是,(inf//for (i = 0; i <= sup; i++) {
for (i = inf; i <= sup; i++) {
//code goes here...
}