import java.util.Arrays; //手寫快速排序 public class QuickSort { public static void main(String[] args) { int[] arr = {2, 4, 8, 3, 5, 9, 1}; System.out.println(Arrays.toString(arr)); quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } /** * @param arr 傳入的數組 * @param left 數組的最左下標 * @param right 數組的最右下標 */ public static void quickSort(int[] arr, int left, int right) { /**選擇中間位置爲基準*/ int l = left; int r = right; int standard = arr[(l + r) / 2]; //遍歷整個數組 while (l < r) { /**從左往右遍歷,直到找到比中間值大的*/ while (arr[l] < standard) { l += 1; } /**從右往左遍歷,直到找到比中間值小的*/ while (arr[r] > standard) { r -= 1; } /**判斷是否越過中間值 * 越界說明中間值左邊的都是*/ if (l >= r) { break; } /**交換數據*/ int temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; } /**說明下標爲l/r的數值已是整個數組的中間值了,無需再動位置*/ if (l == r) { l += 1; r -= 1; } /**向左遞歸*/ if (left < r) { quickSort(arr, left, r); } /**向右遞歸*/ if (right > l) { quickSort(arr, l, right); } } }