
原理说明:
代码实现:
public class QuickSort1 {
public static void main(String[] args) {
int[] a = {5, 3, 7, 2, 9, 8, 1, 4};
partition(a, 0, a.length - 1);
}
public static void quick(int[] a, int l, int h) {
if (l >= h) {
return;
}
int p = partition(a, l, h); // p 索引值
quick(a, l, p - 1); // 左边分区的范围确定
quick(a, p + 1, h); // 右边分区的范围确定
}
private static int partition(int[] a, int l, int h) {
int pv = a[h]; // 基准点元素
int i = l;
for (int j = l; j < h; j++) {
if (a[j] < pv) {
swap(a, i, j); // 自定义的交换方法,将i、j互换
i++;
}
}
swap(a, h, i);
System.out.println(Arrays.toString + "i = " + i);
// 返回值代表了基准点元素所在的正确索引,用它确定下一轮分区的边界
return i;
}
}
运行结果:

原理说明:
代码实现:
public class QuickSort1 {
public static void main(String[] args) {
int[] a = {5, 3, 7, 2, 9, 8, 1, 4};
partition(a, 0, a.length - 1);
}
public static void quick(int[] a, int l, int h) {
if (l >= h) {
return;
}
int p = partition(a, l, h); // p 索引值
quick(a, l, p - 1); // 左边分区的范围确定
quick(a, p + 1, h); // 右边分区的范围确定
}
private static int partition(int[] a, int l, int h) {
int pv = a[l]; // 基准点元素
int i = l;
int j = h;
while (i < j) {
// j 从右找小的
while (i < j && a[j] > pv) {
j--;
}
// i 从左找大的
while (i < j && a[i] <= pv) {
i++;
}
swap(a, i, j);
}
swap(a, l, j);
System.out.println(Arrays.toString + "j = " + j);
// 返回值代表了基准点元素所在的正确索引,用它确定下一轮分区的边界
return j;
}
}
注意要点:
