//快速排序(随机选取基准),基于最左基准点的实现
public class QuickSort {
private int quickSort(int[] data, int left, int right) {
if (left < 0 || right > data.length - 1 || left >= right) {
return -1;
}
int index = left;//设置左边的为基准数
int i = left;
int j = right;
while (i < j) {
// 应该让右边先开始,因为如果data = [4,1,2,3,5,
// 6]。左边开始,left和right将停在5,而右边开始,将停在3。
while (j > i && data[j] >= data[index]) {
j--;
}
while (i < j && data[i] < data[index]) {
i++;
}
if (i < j) {
swap(data, i, j);
} else {
swap(data, index, j);
}
}
return j;
}
private void swap(int[] data, int left, int right) {
int temp = data[left];
data[left] = data[right];
data[right] = temp;
}
public void randomQuickSort(int[] data, int left, int right) {
if (left < 0 || right > data.length - 1 || left >= right) {
return;
}
// 随机选取基准点。
int index = (int) (Math.random() * (right - left) + left);
// 把选取好的基准点与left交换。
swap(data, left, index);
int j = quickSort(data, left, right);
randomQuickSort(data, left, j - 1);
randomQuickSort(data, j + 1, right);
}
}
八大排序算法——快速排序(六)
最新推荐文章于 2024-07-17 09:11:28 发布