publicstaticvoidquickSort(int[] arr, int begin, int end) { // 序列有效 if (begin >= 0 && begin < end && end < arr.length) { inti= begin, j = end; // begin 为左边最开始的元素的下标;end 为最后一个元素的下标 intx= arr[i]; // 以第一个的元素为基准
while (i != j) { // 当交叉比较时 左边和右边下标发生重合子运行结束 while (i < j && arr[j] >= x) { // 从右边向前寻找较小的值移动,不移动与基准值相等的元素 j--; } if (i < j) { arr[i++] = arr[j]; // 子序列的后端较小元素向前移动 } while (i < j && arr[i] <= x) { i++; } if (i < j) { arr[j--] = arr[i]; // 子序列前端较大的元素向后移动 } } arr[i] = x; // 将基准值放入最终位置 quickSort(arr, begin, j - 1); // 前端子序列再排序,递归调用 quickSort(arr, i + 1, end); // 后端子序列在排序,递归调用 } }