为什么快排都能tle

P1923 【深基9.例4】求第 k 小的数

彬腾向前冲 @ 2021-08-17 21:07:35

#include <bits/stdc++.h>

using namespace std;

int q[50000001];
int n,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];
    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 ()
{
    cin >> n >> k;
    for (int i = 0 ; i < n ; i ++) cin >> q[i];

    quick_sort (q,0,n-1);

    cout << q[k];
}

为什么快排都能tle


by Avengers__lsw @ 2021-12-12 00:46:46

@Mr_ZZzz 好像不行,我用的裸快排加scanf和printf还是超时了,归并和快排都不行


by Mr_ZZzz @ 2021-12-24 00:29:58

@Avengers__lsw

现在再看这个问题的时候豁然开朗了。

这题是快选,快选的做法是快排中只取其中一个区间进行递归排序,因为可以确定我要的数肯定不在另一个区间里。

所以快选的时间复杂度是快排的一半。

所以我觉得对整个数列进行排序的算法应该都会被卡。


上一页 |