快速排序 QuickSort

学习链接:坐在马桶上看算法:快速排序

Java代码:

 1 class QuickSort{
 2     int [] sortAns;
 3     
 4     QuickSort(){}
 5     
 6     QuickSort(int[] nums){
 7         QSort(nums,0,nums.length-1);
 8         sortAns=nums;
 9     }
10     
11     protected void QSort(int[] nums,int a,int b){
12         if(a<b){
13             int pos=patition(nums,a,b);
14             QSort(nums,a,pos-1);
15             QSort(nums,pos+1,b);
16         }
17     }
18     int patition(int[] nums,int a,int b){
19         int init=a;
20         while(b>a){
21             while(nums[b]>nums[init] && b>a){
22                 b--;//右侧哨兵左移
23             }
24             while(nums[init]>=nums[a] && b>a){//nums[init]>=nums[a]
25                 a++;//左侧哨兵右移                通过》=,在第一次循环时就使哨兵离开基准数
26             }
27             if(a<b) swap(nums,a,b);
28         }
29         swap(nums,init,a);//基准数归位
30         return a;
31     }
32     
33     void swap(int[] nums,int a,int b){
34         int tmp=nums[a];
35         nums[a]=nums[b];
36         nums[b]=tmp;
37     }
38      public String toString(){
39          int i;
40          String str=new String("");
41          for(i=0;i<sortAns.length;i++) str+=String.valueOf(sortAns[i])+" ";
42          str+="\n";
43          return str;
44      }
45      
46 }

 

posted @ 2017-10-10 14:59  TQCAI  阅读(139)  评论(0编辑  收藏  举报