Java-快速排序

一、快速排序的原理

使用分治算法进行快速排序,以最后一个元素为标识,然后从头开始遍历,把比这个标识小的元素全部放在左边,把比这个标识大的元素全部放在右边,最后就用这个标识将数组分成了两个部分,然后再分别对标识的前后部分的数组继续进行排序,如此下去就能得到排好序的数组。

二、快速排序的伪代码实现

 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 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。