java - Quicksort Java 代码进入无限循环

标签 java sorting data-structures quicksort

当我尝试运行下面的快速排序代码时,它会进入无限循环。最后一次迭代将进入无限循环。

class QuickSort {
    public static void main(String[] args) {
        int arr[] = {10, 7, 8, 9, 1, 5,2};
        QuickSort ob = new QuickSort();
        ob.sort(arr, 0,arr.length-1);
        for(int s:arr){
            System.out.print(" "+s);
        }
    }
    int partition(int[] arr,int l,int h){
        int piv = arr[h];
        int i=l-1;
        for(int j=l;j<=h-1;j++){
            if(arr[j] <= piv){
                i++;
                int temp = arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
        int tp = arr[i+1];
        arr[i+1]=arr[h];
        arr[h]=tp;
        return i+1;
    }

    void sort(int[] arr,int l,int h){
        while(l<h){
            int p = partition(arr, l, h);
            sort(arr, l, p-1);
            sort(arr, p+1, h);
        }

    }
}

请帮忙看看哪里出了问题。

最佳答案

使用 if 条件代替 while 循环,如下所示。

if(l<h){
        int p = partition(arr, l, h);
        sort(arr, l, p-1);
        sort(arr, p+1, h);
    }

无需在无限 while 循环中递归调用 sort。循环是无限的,因为 lr 在算法中永远不会改变。

希望这有帮助:)

关于java - Quicksort Java 代码进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42833480/

相关文章:

java - 如何让 GridBagLayout 遵守按钮或面板的最小尺寸?

php - 基于另一个数组的键对数组进行排序?

c - c堆栈数据结构中的推送操作失败

java.lang.NoClassDefFoundError,Android Studio 2.6.0,内部类,

java -\n 和 System.lineSeparator(); 之间的区别?

使用数据结构的 C 程序部分的复杂性和解释

python - 基于二叉树叶子创建公式

java - Java 的 Python 计数器替代品

java - 使用java方法计算python中列表的所有子集

java - 使用数字和范围对字符串列表进行排序