publicclassSortUtil{ publicstaticvoidquickSort(int data[], int start, int end){ int k; if (start < end) { k = partition(data, start, end); // 排序 k 左侧数据 quickSort(data, start, k - 1); // 排序 k 右侧数据 quickSort(data, k + 1, end); } }
/** * r 下标的数据 简称 pivot。 * 将小于 pivot 的数据 放在分区左边,将大于 pivot 的数据 放在分区右边。pivot 位于两者之间。 * * @param arr * @param l * @param r * @return 排序后 pivot 的下标。 */ privatestaticintpartition(int arr[], int l, int r){ // k 保存 index(最低下标l),pivot 保存 选取的基准值(最高下标r的实际值)。 int k = l, pivot = arr[r]; int i, temp; // 遍历 l到r 区间的数据,如果 数据小于等于pivot,则交换 arr[k] 和 arr[i] // 即 将小于等于 pivot 的数据放到 pivot 左边 for (i = l; i < r; i++) { if (arr[i] <= pivot) { temp = arr[k]; arr[k] = arr[i]; arr[i] = temp; k++; } } // 将 arr[k] 和 arr[r] 替换 // 即 将 pivot 放置在(小于 pivot 的数据)之后 temp = arr[k]; arr[k] = arr[r]; arr[r] = temp; System.out.println(Arrays.toString(arr) + "k=" + k + ",l=" + l + ",r=" + r); return k; } }