1 * 快速排序法(Quick Sort),遞迴版本。 2 * 3 * @param array 傳入要排序的陣列 4 * @param start 傳入要排序的開始位置 5 * @param end 傳入要排序的結束位置 6 */ 7 public static void quickSortRecursive(final int[] array, final int start, final int end) { 8 final int x = array[start]; // pivot,以最左邊為比較點 9 int left = start + 1; //0+1 10 int right = end - 1; //array總數-1 11 while (true) { 12 while (right > start && array[right] >= x) { //最右邊比較點向左移動 13 --right; 14 } 15 while (left <= r && array[left] <= x) { //最左邊比較點向右移動 16 ++left; 17 } 18 if (left < right) { //左邊的array值比右邊的array值小的時候進行交換 19 final int buffer = array[left]; 20 array[left] = array[right]; 21 array[right] = buffer; 22 } else { 23 if (right > start) { //右邊的array值比開始的array值小的時候進行交換 24 final int buffer = array[right]; 25 array[right] = array[start]; 26 array[start] = buffer; 27 } 28 break; 29 } 30 } 31 final int ls = start, le = right; 32 final int rs = right + 1, re = end; 33 final int ll = le - ls, rl = re - rs; 34 if (ll > 1) { 35 quickSortRecursive(array, ls, le); //改變比較點的位置 36 } 37 if (rl > 1) { 38 quickSortRecursive(array, rs, re);//改變比較點的位置 39 } 40 } 41 42 /** 43 * 快速排序法(Quick Sort)。 44 * 45 * @param array 傳入要排序的陣列 46 */ 47 public static void quickSort(final int[] array) { 48 quickSortRecursive(array, 0, array.length); 49 }