Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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的伪代码--Hoare';s分割算法——What';这里怎么了?_Java_Algorithm_Sorting_Quicksort - Fatal编程技术网

Java的伪代码--Hoare';s分割算法——What';这里怎么了?

Java的伪代码--Hoare';s分割算法——What';这里怎么了?,java,algorithm,sorting,quicksort,Java,Algorithm,Sorting,Quicksort,我正在尝试实现这一点: 在pseudo中,事物从1开始。在我的代码中,事情从0开始。除此之外,没有区别 我得到了错误的结果: arr content: 11 2 4 1 7 5 New arr content: 1 2 4 7 11 5 我做错了什么 public static void hQuickSort(int[] A, int p, int r) { if (p < r) { int q = hPart

我正在尝试实现这一点:

在pseudo中,事物从1开始。在我的代码中,事情从0开始。除此之外,没有区别

我得到了错误的结果:

arr content:
11  2   4   1   7   5   
New arr content:
1   2   4   7   11  5   
我做错了什么

public static void hQuickSort(int[] A, int p, int r) {

    if (p < r) {

        int q = hPartition(A, p, r);

        hQuickSort(A, p, q);
        hQuickSort(A, q + 1, r);
    }

}

public static int hPartition(int[] A, int p, int r) {
    int pivot = A[p];
    int i = p;
    int j = r;
    int temp;

    while (true) {
        while (A[i] < pivot) {
            i++;
        }

        while (A[j] > pivot) {
            j--;
        }

        if (i < j) {
            temp = A[i];
            A[i] = A[j];
            A[j] = temp;
        } else {
            return j;
        }
    }

}

提示:“while”和“until”有相反的含义。@realponsuggest谢谢!现在我得到了部分错误的结果。更新了我的问题。有什么想法吗?我的错,它工作正常!但是我不知道为什么!!此实现中还有另一个错误:如果A[i]和A[j]都等于轴,则有一个无限循环。提示:“while”和“until”具有相反的含义。@realpoint谢谢!现在我得到了部分错误的结果。更新了我的问题。有什么想法吗?我的错,它工作正常!但是我不知道为什么!!这个实现中还有另一个bug:如果A[i]和A[j]都等于枢轴,那么就有一个无限循环。
    hQuickSort(arr, 0, 5);