Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java代码快速排序到无限循环_Java_Sorting_Data Structures_Quicksort - Fatal编程技术网

将Java代码快速排序到无限循环

将Java代码快速排序到无限循环,java,sorting,data-structures,quicksort,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){

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

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

    }
}
类快速排序{
公共静态void main(字符串[]args){
int arr[]={10,7,8,9,1,5,2};
快速排序ob=新的快速排序();
对象排序(arr,0,arr.length-1);
对于(整数s:arr){
系统输出打印(“+s”);
}
}
int分区(int[]arr,int l,int h){
int piv=arr[h];
int i=l-1;

对于
sort()中的(int j=l;j
l
h
sort()中的
l
l
h
始终保持不变
永不更改,因此在循环时,始终使用
l

而不是
,使用
if
条件,如下所示

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

if(l而不是
while
循环,使用
if
条件,如下所示

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

if(l您在排序方法中使用了
while
。这会导致无限次递归调用,最终导致
StackOverFlowException
。正如注释中所建议的,这些是常见错误,您可以通过调试(或简单算法的简单干运行)轻松找到它们

您只需要从满足条件
(l
为此,您需要一个
if
条件,而不是
while
循环,如下所示

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

如果(l您在排序方法中使用了
while
。这将导致无限递归调用,最终将导致
StackOverFlowException
。如注释所示,这些是常见错误,您可以通过调试(或简单算法的简单干运行)轻松找到它们

您只需要从满足条件
(l
为此,您需要一个
if
条件,而不是
while
循环,如下所示

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

如果(使用调试器找出发生了什么情况)您是否尝试过调试代码?您忘记了递归方法的基础…退出条件如果有助于解决问题,您可以接受我的答案:)使用调试器找出发生了什么事您试过调试代码吗?您忘记了递归方法的基础…退出条件如果有助于解决问题,您可以接受我的答案:)