public class Main{
public static void sort(Comparable[] array) {
sort(array, 0, array.length - 1);
}
private static void sort(Comparable[] array, int start, int end) {
if (end <= start)
return;
int index = partition(array, start, end);
sort(array, start, index - 1);
sort(array, index + 1, end);
}
private static boolean less(Comparable a, Comparable b) {
return a.compareTo(b) < 0;
}
// 交换
private static void exec(Comparable a[], int i, int j) {
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
/*
* 切分数组
*/
private static int partition(Comparable[] array, int start, int end) {
int l = start, r = end + 1;
int index = rand(start, end);
exec(array, start, index);
Comparable v = array[0];
while (true) {
while (less(array[++l], v))
if (l == end) {
break;
}
while (less(v, array[--r]))
if (r == start)
break;
if (r <= l)
break;
exec(array, l, r);
}
exec(array, start, r);
return r;
}
/*
* 返回st-end之间的一个随机数
*/
private static int rand(int st, int end) {
if (st > end) {
return 0;
}
Random rand = new Random();
int r = rand.nextInt((end - st + 1)) + 1;
return (st - 1) + r;
}
}
排序之快速排序
最新推荐文章于 2024-08-13 09:00:00 发布