class Quick
{
public static void main(String[] args) {
int[] a = {1,3,2,8,6,5,20,80,60};
sort(a);
Print(a);
}
private static void Print(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
System.out.println("....");
}
private static void Print(int a) {
System.out.println(a);
}
private static void sort (int[] a) {
sort(a, 0, a.length - 1);
}
private static void sort (int[] a, int lo, int hi) {
if (hi <= lo) return;
int j = partition(a, lo, hi);
Print(j);
sort(a, lo, j - 1);
sort (a, j+1, hi);
}
private static int partition (int[] a, int lo, int hi) {
int i = lo, j =hi + 1;
int tmp = 0;
// 选取第一个数为基准
int v = a[lo];
while (true) {
/*
1,3,2,8,6,5
选出1
1.向右找出小于1的数,如果没有跳出
2.由右向左找小于的数,如果没有跳出
3.交换两个数
*/
// 向右遍历,一直找到 大于 v 的数
while (a[++i] < v) if (i == hi) break;
// 向左遍历, 一直找到 小于 v的数
while (v < a[--j]) if (j == lo) break;
if (i >= j ) break;
// 两个数交换
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
tmp = a[lo];
a[lo] = a[j];
a[j] = tmp;
return j;
}
}
java 快速排序
最新推荐文章于 2022-01-08 11:11:19 发布