#3800. 快速排序求第 k 小

快速排序求第 k 小

这里给你了一份快速排序相关函数的代码,它需要实现对 aa 数组下标 lrl\sim r 之间的元素寻找第 kk 小的功能。你需要补全这个代码。

int qsort(int a[], int l, int r, int k) {
    if (l == r) {
        return a[l];
    }
    int i = l, j = r;
    int x = ①;
    while (i <= j) {
        while (i <= j && a[i] > x) {
            i++;
        }
        while (i <= j && ②) {
            j--;
        }
        if (i <= j) {
            swap(a[i], a[j]);
            i++;
            j--;
        }
    }
    if (③) {
        return qsort(a, i, r, ④);
    } else {
        return qsort(⑤);
    }
}

① 处 不应填 {{ select(1) }}

  • l
  • a[l]
  • a[r]
  • a[(l + r) >> 1]

② 处应填 {{ select(2) }}

  • a[j] > x
  • a[j] >= x
  • a[j] < x
  • a[j] <= x

③ 处应填 {{ select(3) }}

  • k <= r - i + 1
  • k > r - i + 1
  • k < r - i + 1
  • k >= r - i + 1

④ 处应填 {{ select(4) }}

  • k
  • k - (j - l + 1)
  • n - k
  • k - 1

⑤ 处应填 {{ select(5) }}

  • a, l, j, k
  • a, l, j - 1, k
  • a, l, j, k - (r - i + 1)
  • a, l, j - 1, k - (r - i + 1)