今天,在尝试快速排序时,我没有将最后一个元素作为枢轴和分区,而是将第一个元素作为枢轴,但它没有产生正确的分区输出。
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;
}
}
它们之间有什么区别。
答案 0 :(得分:0)
最后发现,这个方法是Hoare的分区方法,我们都遵循的典型快速排序方法是lomuto的分区。
请参阅此Wiki页面,其中包含所有详细信息https://en.wikipedia.org/wiki/Quicksort