我在理解此分区方法时遇到了麻烦.使用随机数据透视似乎无效,仅当我将其中之一用作数据透视似乎有效:
> arr [左]
> arr [右-1]
> arr [(左右)/ 2]
但是,我认为任何元素都应该起作用.当我将其更改为arr [1]之类的代码时,代码将停止工作…我是否对数据透视表有所误解?
这是partition()方法的代码:
public static int partition(int arr[], int left, int right) {
// Pick a pivot point. Can be any element.
int pivot = arr[(left + right) / 2];
while (left <= right) {
while (arr[left] < pivot) {
left++;
}
while (arr[right] > pivot) {
right--;
}
if (left <= right) {
swap(arr, left, right);
left++;
right--;
}
}
return left;
}
附带说明一下,我也不确定为什么我们要从partition()方法返回左端.