1. 程式人生 > 其它 >演算法導論-第7章

演算法導論-第7章

技術標籤:java實現演算法導論

快速排序

原理講解

小破孩,永不止步

在這裡插入圖片描述

快速排序-簡單版本

	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);
        }
    }