java - 这个 "mergeSort"有什么问题吗?

标签 java sorting mergesort

我在类里面复制了一段mergeSort代码,你能帮我找出错误吗?

当我运行使用 mergeSort 的主程序时,程序进入无限循环,但不显示任何错误。我尝试在 Debug模式下运行,但我不是很专业,也没有发现问题所在。但是我认为错误出在 mergeSort(int[] v, int inf, int su) 递归中。

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);
    }

}
}

最佳答案

正如 Maverik 指出的,问题出在 mergeSort() 中的 while 循环。

infsup 永远不会被修改,因此 inf 始终小于 sup。循环永远不会终止。

关于java - 这个 "mergeSort"有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16527121/

相关文章:

java - 在 android 中调整图片大小同时仍保持质量

java - 我应该使用哪种 Java 集合类型?

javascript - 更改页面后 DGrid 自行排序

algorithm - 如何对不同文件中的多个 GB 数据进行排序?

C++ 合并排序错误在换行文本上中断

java - jvisualvm:卡在 "Loading Heap Dump"屏幕上

Java存储过程运行缓慢

javascript - 使用点分隔符对字符串的数组数量进行排序

linux - 按bash中的多列排序

algorithm - 使用就地合并进行合并排序