我在课堂上复制了一个 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) {
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);
}
}
}
答案 0 :(得分:1)
正如Maverik所指出的,问题是while
中的mergeSort()
循环。
inf
和sup
永远不会被修改,因此inf
始终小于sup
。循环永远不会终止。
答案 1 :(得分:0)
合并排序中的问题(基于评论):
在mergeSort
方法中,您在mergeSort
循环内递归调用while
,并且永远不会更改inf
和sup
的值。请改为if
。
if (inf < sup) {
//code goes here...
}
在方法正文底部的merge
排序中,您将项目全部从aux
数组移至{{1数组。您应该只在v
和inf
之间移动元素:
sup