Java 快速排序帮助-分区

Java 快速排序帮助-分区,java,quicksort,Java,Quicksort,我正在迭代和递归地实现自己的快速排序 当pivot右侧的数字大于而左侧的数字小于时,它将获得第一个分区 然而,我的分区似乎并没有划分右侧,只有左侧 int[] data = {3,5,2,7,11,9,1,88,22}; public void qSort(int[] data, int left, int right){ int pivot = partition(data,left,right); pivot = partition(data,pivot,data.leng

我正在迭代和递归地实现自己的快速排序

当pivot右侧的数字大于而左侧的数字小于时,它将获得第一个分区

然而,我的分区似乎并没有划分右侧,只有左侧

int[] data = {3,5,2,7,11,9,1,88,22};

public void qSort(int[] data, int left, int right){
    int pivot = partition(data,left,right);
    pivot = partition(data,pivot,data.length-1); // Test example for right side only
}

public int partition(int[] data, int left, int right){
    int pivot = left;
    left++;

    while (left <= right){
        while ((left <= right) && (data[left] <= data[pivot])) {
            left++;
        }

        while ((left <= right) && (data[right] >= data[pivot])){
            right--;
        }

        if (left < right){
            int temp = data[left];
            data[left] = data[right];
            data[right] = temp;
            left++;
            right--;
        }          
    }

    if (data[right] < data[pivot]){
        int temp = data[right];
        data[right] = data[pivot];
        data[pivot] = temp;
        pivot = right;
    } 

    return pivot;
}
int[]数据={3,5,2,7,11,9,1,88,22};
公共void qSort(int[]数据,int左,int右){
int pivot=分区(数据,左,右);
pivot=partition(data,pivot,data.length-1);//仅针对右侧的测试示例
}
公共int分区(int[]数据,int左,int右){
int轴=左;
左++;

虽然(left实际上您的分区实现工作正常,但您将错误的
left
参数传递到
partition
中:

pivot = partition(data, pivot, data.length - 1); // Test example for right side only
应该是:

pivot = partition(data, pivot + 1, data.length - 1); // You need to exclude the pivot itself.

因为在您的实现中,您选择最左边的元素作为pivot,所以如果您在尝试对右侧部分进行分区时将
pivot
作为
left
参数传递,则所有内容都将保持不变,因为它已被分区。

谢谢!在执行您的建议后,我成功地使其递归工作:)@ Ketameme,乐于助人:-顺便说一下,你不需要通过<代码> PIVOT 到左和右子分区,因为它已经在正确的位置。@ Ketameme,请考虑接受它作为解决方案,如果它真的解决了你的问题:-谢谢