我正在编写一个快速排序程序。为此,我需要对数组进行分区。分区是由一个函数完成的paritionIt()
。我写了一个分区数组的代码,如下所示:
int partition(int beg,int end,double key)
{
int pLeft = beg;
int pRight = end-1;
while(pLeft<pRight)
{
while(array[++pLeft]<key);
while(array[--pRight]>key);
if(pLeft<pRight)
swap(pLeft,pRight);
}
swap(pLeft,end-1);
return pLeft;
}
当单独执行时,这个块似乎可以正常工作。但是,当与其他函数一起运行时,它似乎会产生错误的答案。给我的以下代码使所有问题都消失了,但它与我的代码似乎没有太大区别。
int partitionIt(int left, int right, double pivot)
{
int leftMark = left; //right of first elem
int rightMark = right - 1; //left of pivot
while(true)
{
while( theVect[++leftMark] < pivot ) //find bigger
; // (nop)
while( theVect[--rightMark] > pivot ) //find smaller
; // (nop)
if(leftMark >= rightMark) //if pointers cross,
break; // partition done
else //not crossed, so
swap(leftMark, rightMark); //swap elements
} //end while(true)
swap(leftMark, right-1); //restore pivot
return leftMark; //return pivot location
} //end partitionIt()
该块似乎与我的相似,但给出了正确的答案,而我的不是。你能告诉我有什么区别吗?partition()
和之间有什么区别吗partitionIt()
?