private int partition(int[] array, int i, int j) {
//选择最左侧的元素作为中心点,middleValue就是中心点的值
int middleValue = array[i];
int middleIndex = i;
//从i+1遍历整个数组
for (int k = i+1; k <= j; k++) {
//如果数组元素小于middleValue,表示middleIndex需要右移一位
//右移之后,我们需要将小于middleValue的array[k]移动到middleIndex的左边,
// 最简单的办法就是交换k和middleIndex的值
if (array[k] < middleValue) {
middleIndex++;
//交换数组的两个元素
swap(array, k , middleIndex);
} //如果数组元素大于等于middleValue,则继续向后遍历,middleIndex值不变
}
// 最后将中心点放入middleIndex位置
swap(array, i, middleIndex);
return middleIndex;
}
private int partition(int[] array, int i, int j) {
//随机选择一个元素作为中心点,middleValue就是中心点的值
int randomIndex=i+new Random().nextInt(j-i);
log.info("randomIndex:{}",randomIndex);
//首先将randomIndex的值和i互换位置,就可以复用QuickSort的逻辑
swap(array, i , randomIndex);
int middleValue = array[i];
int middleIndex = i;
//从i遍历整个数组
for (int k = i+1; k <= j; k++) {
//如果数组元素小于middleValue,表示middleIndex需要右移一位
//右移之后,我们需要将小于middleValue的array[k]移动到middleIndex的左边,
// 最简单的办法就是交换k和middleIndex的值
if (array[k] < middleValue) {
middleIndex++;
//交换数组的两个元素
swap(array, k , middleIndex);
} //如果数组元素大于等于middleValue,则继续向后遍历,middleIndex值不变
}
// 最后将中心点放入middleIndex位置
swap(array, i, middleIndex);
return middleIndex;
}