Java 以中间元素为轴心实现快速排序

Java 以中间元素为轴心实现快速排序,java,pivot,quicksort,Java,Pivot,Quicksort,我尝试并编写了一个以中间元素为轴心的快速排序代码 我成功地写了一本 但Pivot具有以下特性: 左侧的元素小于枢轴,右侧的元素大于枢轴 我无法在下面的代码中实现这一点 private static void QuickSortAlgorithm(int[] a, int i, int n) { if(i<n) { int part = partition(a,i,n); QuickSortAlgorithm(a, i, part-1);

我尝试并编写了一个以中间元素为轴心的快速排序代码

我成功地写了一本

但Pivot具有以下特性:

左侧的元素小于枢轴,右侧的元素大于枢轴

我无法在下面的代码中实现这一点

private static void QuickSortAlgorithm(int[] a, int i, int n) 
{
    if(i<n)
    {
        int part = partition(a,i,n);

        QuickSortAlgorithm(a, i, part-1);

        QuickSortAlgorithm(a, part, n);
    }
}

private static int partition(int[] a, int i, int n) 
{
    int pivot = (i+n)/2;

    int left = i;

    int right = n;
    while(left<=right)
    {
        while(a[left]<a[pivot]){
            left++;
        }

        while(a[right]>a[pivot])
        {
            right--;
        }

        if(left<=right)
        {
            swap(a,left,right);
            left++;
            right--;
        }
    }
    return left;

}
我的疑问是:

我正在发送左作为我的分区索引

但是,当我递归调用QuickSortAlgorithm()时

我正在将
I发送到第1部分
部分发送到第n部分

我应该发送什么作为分区索引以便

我可以这样称呼:这样就满足了pivot属性

    QuickSortAlgorithm(a, i, part-1);

    QuickSortAlgorithm(a, part+1, n);

谢谢:)

您可以选择数组中最左边的元素,也可以选择任意随机元素作为轴心


有关选择轴的详细信息,请查看。您可以选择数组中最左侧的元素,也可以选择任意随机元素作为轴


查看以了解有关选择pivot的更多详细信息,您必须在第一个堆栈调用(包括)中发送pivot值,并将pivot+1作为第二个堆栈调用的较低索引。
您还必须将left的值设置为i+1,然后您的代码将给出正确的输出

您必须在第一个堆栈调用(包括)中发送pivot值,并将pivot+1作为第二个堆栈调用的较低索引。
您还必须将left的值设为i+1,然后您的代码将给出正确的输出

他希望选择中间元素作为轴心,而不是第一个或最后一个!他想选择中间元素作为轴心,而不是第一个或最后一个!
    QuickSortAlgorithm(a, i, part-1);

    QuickSortAlgorithm(a, part+1, n);