Java 快速排序的轴选择,发生了什么,我的算法有什么不正确的地方吗?

Java 快速排序的轴选择,发生了什么,我的算法有什么不正确的地方吗?,java,algorithm,sorting,quicksort,Java,Algorithm,Sorting,Quicksort,有人能指导我实施快速排序吗。当我选择pivot作为数组中的最后一个元素时,我试图将我的快速排序实现的错误形象化 下面是我的代码: public void quickSort(int[] input, int left, int right) { if(left < right) { //int pivot = input[(left + right) / 2]; // works fine with this //in

有人能指导我实施快速排序吗。当我选择pivot作为数组中的最后一个元素时,我试图将我的快速排序实现的错误形象化

下面是我的代码:

    public void quickSort(int[] input, int left, int right) {
        if(left < right) {
            //int pivot = input[(left + right) / 2]; // works fine with this
            //int pivot = input[left];               // works fine with this
            int pivot = input[right];
            int index = partition(input, left, right, pivot); // line 12
            quickSort(input, left, index - 1); // line 13
            quickSort(input, index, right);    // line 14
        } 
    }
    
    private int partition(int[] input, int left, int right, int pivot) {
        while(left <= right) {
            while(input[left] < pivot) {
                left++;
            }
            while(input[right] > pivot) {
                right--;
            }
            if(left <= right) {
                int temp = input[left];
                input[left] = input[right];
                input[right] = temp;
                left++;
                right--;
            }
        }
        return left;
    }
当pivot是
输入[右]
时,它会失败,但

Exception in thread "main" java.lang.StackOverflowError
    at com.maverick.solution.Solution.quickSort(Solution.java:12)
    at com.maverick.solution.Solution.quickSort(Solution.java:13)
请指导我,纠正问题或哪里出了问题


谢谢

当最大的元素到达数组的末尾时,问题基本上就出现了。在这种情况下,
left
right
的值将相等,
partition()
将返回
array。length+1
和相同的函数调用将反复进行

示例:
[5,4,3,2,1]
如果调试代码,您将看到问题在
快速排序([1,4,3,2,5],1,4)
调用发生时开始。这将调用
partition()
,返回5,在下一行
快速排序([1,4,3,2,5],1,4)
发生时,循环继续

值相等,且
位置存在最大元素时,可能需要对
分区()进行逻辑校正

考虑一下
partition()
的工作,它基本上是返回索引,直到对哪个数组进行排序,您的
partition()
逻辑实现了它吗

尝试不同的输入并调试代码

有关快速排序的更多信息,请参阅

Exception in thread "main" java.lang.StackOverflowError
    at com.maverick.solution.Solution.quickSort(Solution.java:12)
    at com.maverick.solution.Solution.quickSort(Solution.java:13)