普通快排怎么优化,只能a3个点,60分,超时两个。
查看原帖
普通快排怎么优化,只能a3个点,60分,超时两个。
604432
kkhll楼主2022/12/17 14:52

我看到网上有随机取数优化,还有尾递归优化,但不知道怎么操作..

#include <iostream>

using namespace std;

const int N = 5000000;

int q[N];

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];
    while (i < j)
    {
        do i ++ ; while (q[i] < x);
        do j -- ; while (q[j] > x);
        if (i < j) swap(q[i], q[j]);
    }

    quick_sort(q, l, j);
    quick_sort(q, j + 1, r);
}

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

    for (int i = 0; i < n; i ++ ) scanf("%d", &q[i]);

    quick_sort(q, 0, n - 1);

    printf("%d", q[k]);

    return 0;
}


2022/12/17 14:52
加载中...