public class QuickSort {
public static void main(String[] args) {
int a[] = {5, 3, 7, 2, 9, 8, 1, 4};
quickSort(a, 0, a.length - 1);
}
public static void quickSort(int[] a, int l, int h) {
if (l >= h) {
return;
}
int p = partition(a, l, h);
quickSort(a, l, p - 1);
quickSort(a, p + 1, h);
}
/**
* 单边快排
*
* @param a 数组
* @param l 第一个元素
* @param h 最后一个元素
* @return 基准点坐标
*/
public static int partition(int[] a, int l, int h) {
//选取最后边的元素作为基准点
int pv = a[h];
//设置两个指针i,j,从头开始遍历
int i = l;
for (int j = l; j < h; j++) {
//小于基准点元素进行交换
if (a[j] < pv) {
if (i != j) {
swap(a, i, j);
}
i++;
}
}
if (i != h) {
swap(a, h, i);
}
System.out.println(Arrays.toString(a) + " i:" + i);
return i;
}
public static void swap(int[] a, int x, int y) {
int temp = a[x];
a[x] = a[y];
a[y] = temp;
}
}
排序—快速排序(单边快排)
最新推荐文章于 2024-06-14 14:08:37 发布