关于第三个点和分界点取值的问题
查看原帖
关于第三个点和分界点取值的问题
853487
oidd楼主2023/3/13 22:47

为啥这里取x = q[l + r + 1 >> 1]就过了第三个样例,取x = q[l + r >> 1]就wa第三个

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int n;
const int N = 5e6 + 10;
int nums[N];
int k;
void quick_sort(int q[], int l, int r)
{
    if (l >= r) return;

    int i = l - 1, j = r + 1, x = q[l + r + 1 >> 1];
    while (i < j)
    {
        do i++; while (q[i] < x);
        do j--; while (q[j] > x);
        if (i < j) swap(q[i], q[j]);
    }
    if (q[k] <= x)
        quick_sort(q, l, j);
    else if (q[k] >= x)
        quick_sort(q, j + 1, r);
}


int main()
{
    scanf("%d", &n);
    scanf("%d", &k);

    for (int i = 0; i < n; i++)
        scanf("%d", &nums[i]);
    quick_sort(nums, 0, n - 1);

    cout << nums[k];
    return 0;
}
2023/3/13 22:47
加载中...