標籤:
一、快速排序的原理
使用分治演算法進行快速排序,以最後一個元素為標識,然後從頭開始遍曆,把比這個標識小的元素全部放在左邊,把比這個標識大的元素全部放在右邊,最後就用這個標識將數組分成了兩個部分,然後再分別對標識的前後部分的數組繼續進行排序,如此下去就能得到排好序的數組。
二、快速排序的虛擬碼實現
1 QUICKSORT(A, p, r) 2 if p < r 3 then q ← PARTITION(A, p, r) 4 QUICKSORT(A, p, q - 1) 5 QUICKSORT(A, q + 1, r) 6 PARTITION(A, p, r) 7 x ← A[r] 8 i ← p - 1 9 for j ← p to r - 1 10 do if A[j] ≤ x 11 then i ← i + 1 12 exchange A[i] ←→ A[j] 13 exchange A[i + 1] ←→ A[r] 14 return i + 1
三、快速排序的Java代碼實現
1 import java.util.Comparator; 2 3 4 public class QuickSort { 5 6 public static <T> void quickSort(T[] t, int p, int r, Comparator<? super T> c){ 7 if(p < r-1){ 8 int q = partition(t, p, r, c); 9 quickSort(t, p, q, c);10 quickSort(t, q+1, r, c);11 12 }13 }14 public static <T> int partition(T[] t, int p, int r, Comparator<? super T> c){15 T x = t[r-1];16 int i = p-1;17 for(int j = p; j < r-1; j ++){18 if(c.compare(t[j], x) < 0){19 i = i + 1;20 T temp = t[i];21 t[i] = t[j];22 t[j] = temp;23 }24 }25 T temp = t[i+1];26 t[i+1] = t[r-1];27 t[r-1] = temp;28 return i + 1; 29 }30 31 public static <T> void quickSort(T[] t, Comparator<? super T> c){32 quickSort(t, 0, t.length, c);33 }34 35 public static void main(String[] args){36 //在這裡進行代碼測試37 Integer[] ints = new Integer[]{2, 0, 5, 23, 1, 4, 8, 56, 19};38 quickSort(ints, new Comparator<Integer>(){39 public int compare(Integer o1, Integer o2){40 return o1-o2;41 }42 }); 43 44 for(int i = 0; i < ints.length; i ++){45 System.out.print(ints[i] + " ");46 }47 }48 }
運行結果:
0 1 2 4 5 8 19 23 56
Java-快速排序