老师好,我按照双指针的方法自己实现了一下划分,但是有个问题,标记处这两个语句交换一下位置,交换前是有序正确的,交换后就是错的,我不知道为啥...
int _partition(int A[],int left,int right){
int temp = rand() % (right - left + 1) + left;
swap(A[left],A[temp]);
temp = left;
while(left < right){
//***这是交换前,是正确的
while(left < right && A[right] > A[temp]) right--;
while(left < right && A[left] <= A[temp]) left++;
//***这是交换后,是错误的
while(left < right && A[left] <= A[temp]) left++;
while(left < right && A[right] > A[temp]) right--;
swap(A[left],A[right]);
}
swap(A[temp],A[left]);
return left;
}