public class QuickSort {
static Comparable[] a;
public static void quickSort(int p, int r) {
if (p < r) {
int q = partition(p,r);
quickSort(p,q - 1);
quickSort(q + 1,r);
}
}
private static int partition(int p, int r) {
Comparable x = a[p];
int i = p;
int j = r + 1;
while (true) {
while (a[++i].compareTo(x) < 0 && i < r);
while (a[--j].compareTo(x) > 0);
if (i >= j) {
break;
}
MyMath.swap(a,i,j);
}
a[p] = a[j];
a[j] = x;
return j;
}
public static int randomizedPartition(int p, int r) {
int i = MyMath.random(p,r);
MyMath.swap(a,i,p);
return partition(p,r);
}
public static void randomizedQuickSort(int p, int r) {
if (p < r) {
int q = randomizedPartition(p,r);
quickSort(p,q - 1);
quickSort(q + 1,r);
}
}
public static void main(String[] args) {
Comparable[] a = {5,3,1,9,8,2,4,7};
QuickSort.a = a;
QuickSort.randomizedQuickSort(0,a.length - 1);
System.out.println(Arrays.toString(QuickSort.a));
}
}
(递归和分治)快速排序
最新推荐文章于 2022-10-16 18:45:50 发布