public static void quickSost(int arr[], int left, int right) {
if (left > right) return; // 递归出口
int l = left, r = right, base = arr[left], temp;
while (l != r) {
// 从右往左找,如果找到比基准数大的就停止循环,否则r--
while (l < r && !(arr[r] < base)) r--;
// 从左往右找,如果找到比基准数小的就停止循环,否则l++
while (l < r && !(arr[l] > base)) l++;
// 交换
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
// 如果基准数比中间元素大,就进行交换
if (arr[left] > arr[r]) {
temp = arr[left];
arr[left] = arr[r];
arr[r] = temp;
}
quickSost(arr, l + 1, right); // 往右递归
quickSost(arr, left, r - 1); // 往左递归
}
网友评论