快排算法的簡單實現

java實現:java

細節和註解都在註釋在代碼中了。ui

 1     private static int position(int[] ary,int low,int high){
 2         int i = low,j = high+1;
 3         int pivot = ary[low];//選定中軸元素
 4         while(true){
 5             while(ary[++i] < pivot) {//遇到大於等於pivot時停下
 6                 if (i == high) {break;}//此處有必要檢查,當pivot恰好爲當前序列的最大值時,今後處break出來。
 7             }
 8             while(ary[--j] > pivot){//遇到小於等於pivot時停下
 9                 if(j == low){break;}//此處可無需檢查,由於j==low時,ary[j] == ary[low],必會在while檢查時停下。
10             }
11 //            System.out.println("i:"+i+"---"+"j:"+j);
12             if (i >= j) {break;}//退出主循環,注意,i有可能大於j
13             swap(ary, i, j);
14         }
15         swap(ary, low, j);//由於j停下的位置時是小於等於pivot,所以應當讓pivot和ary[j]交換
16         return j;//返回pivot在全局下的次序位置
17     }
18     public static void quickSort(int[] ary,int low,int high){
19         if(low >= high){return;}//遞歸基,單個元素天然有序
20         int position = position(ary, low, high);
21         quickSort(ary, low, position-1);//low到position-1中的全部元素均<=ary[position]
22         quickSort(ary, position+1, high);//position+1到high中的全部元素均>=ary[position]
23     }

一些值得注意的細節問題:spa

一、i從low開始,j從high+1開始;i和j指針移動過程當中採用++i和--j的形式。指針

二、if (i == high) {break;}須要檢查,不然在某些狀況下會出錯。code

相關文章
相關標籤/搜索