【发布时间】: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;
}
}
它们之间有什么区别。
【问题讨论】: