나는 quicksort 프로그램을 작성 중입니다. 그 때문에 배열을 분할해야합니다. 파티셔닝은 함수 paritionIt()
에 의해 수행됩니다.C++ ⎼ 두 가지 유사한 기능을하지만 매우 다르게 수행합니다.
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()
의 차이점을 알려주시겠습니까?
코드 (첫 번째 블록)를 두 번째 블록으로 바꾸면 모든 함수가 예상대로 작동합니까? – Kevin
두 코드 사이에 기능상의 차이점이 없습니다. –
그래 ... 사실, 내 전체 코드는 책에서 주어진 코드와 일치합니다 (변수 이름 제외). – kusur