Java 什么';这是不对的;合并排序;?

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代码,你能帮我找到错误吗

当我运行使用
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... }