一、快速排序的原理
使用分治算法进行快速排序,以最后一个元素为标识,然后从头开始遍历,把比这个标识小的元素全部放在左边,把比这个标识大的元素全部放在右边,最后就用这个标识将数组分成了两个部分,然后再分别对标识的前后部分的数组继续进行排序,如此下去就能得到排好序的数组。
二、快速排序的伪代码实现
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