【问题标题】:Peculiar issue with quicksort partition快速排序分区的特殊问题
【发布时间】:2016-08-09 05:47:27
【问题描述】:

今天,在尝试快速排序时,我没有将最后一个元素作为枢轴和分区,而是将第一个元素作为枢轴,但它没有产生正确的分区输出。

int pivot = ar[0];
int pindex = 0;

for(int  i = 0;i < ar.size();i++)
{
    if(ar[i] <= pivot)
    {
        swap(ar[i],ar[pindex]);
        pindex++;
    }
}
swap(ar[pindex],ar[ar.size()-1]);

我不明白为什么,我总是将它用于分区,但是当我将第一个元素作为分区时,这不起作用。

但即使我将第一个元素作为分区,这仍然有效

int i, j, pivot, temp;
pivot = ar[0];
i = 0;
j = ar.size()-1;
while(1)
{
    while(ar[i] < pivot && ar[i] != pivot)
        i++;
    while(ar[j] > pivot && ar[j] != pivot)
        j--;
    if(i < j)
    {
        temp = ar[i];
        ar[i] = ar[j];
        ar[j] = temp;
    }
    else
    {
        break;
    }
}

它们之间有什么区别。

【问题讨论】:

    标签: quicksort partitioning


    【解决方案1】:

    最后发现,这个方法是Hoare的partition方法,而我们大家遵循的典型快速排序方法是lomuto的partition。

    查看此 wiki 页面,它包含所有详细信息 https://en.wikipedia.org/wiki/Quicksort

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 2015-10-28
      • 2018-09-13
      • 1970-01-01
      • 2018-01-31
      相关资源
      最近更新 更多