public static void main(String[] args) { int[] nums = {25,84,21,47,15,27,68,35,20}; mQuickSort(nums,0,nums.length-1); } public static void mQuickSort(int[] arr, int start, int end) { if (start < end) { int split = mPartition(arr,start,end); mQuickSort(arr,start,split-1); mQuickSort(arr,split+1,end); } } public static int mPartition(int[] arr, int start, int end) { int i = start+1; int j = end; while (i <= j) { // 从后往前找到第一个比arr[start]小的元素 // 注意,这里不能是 j >= start,否则 j 的值可能为 start-1,最后的swap会出现错误! while (j > start && arr[j] >= arr[start]) j--; // 从前往后找到第一个比arr[start]大的元素 while (i <= end && arr[i] <= arr[start]) i++; if (i < j) { swap(arr,i,j); } } swap(arr,start,j); System.out.println(Arrays.toString(arr)); return j; }