演算法導論-第7章
阿新 • • 發佈:2020-12-09
快速排序
小破孩,永不止步
快速排序-簡單版本
private static void quickSort(int a[], int p, int r) {
if (p < r) {
int q = partition(a,p,r);
quickSort(a,p,q-1);
quickSort(a,q+1,r);
}
}
private static int partition(int a[], int p, int r) {
int x = a[r - 1];
int i = p - 1;
for (int j = p; j <= r - 1; j++) {
if (a[j - 1] <= x) {
i = i + 1;
exchange(a,i,j);
}
}
exchange(a,i+1,r);
return i+1 ;
}
private static void exchange(int a[], int i, int j) {
int temp = a[i - 1];
a[i - 1] = a[j - 1];
a[j - 1] = temp;
}
public static void main(String[] args) {
int[] a ={1,20,50,70,60,40,19,31,37,18};
quickSort(a,1,a.length);
System.out. println(Arrays.toString(a));
}
快速排序-隨機化版本
private static int randomizedPartition(int a[], int p, int r) {
Random random = new Random();
int ran = random.nextInt(r - p + 1) + p;
exchange(a,ran,r);
return partition(a,p,r);
}
private static void randomizedQuicksort(int a[],int p,int r){
if(p<r){
int q = randomizedPartition(a,p,r);
randomizedQuicksort(a,p,q-1);
randomizedQuicksort(a,q+1,r);
}
}