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