快速排序 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 }