C++60分两个点没过求大佬救命

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

Leibyi_233 @ 2022-07-30 21:15:38

前两个AC,后两个WA

#include<iostream>
#include<algorithm>
using namespace std;
int a[500500], n, k;
void sort(int* a, int l, int r);
int main()
{
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    sort(a, 0, (n-1));
    cout << a[k];
    return 0;
}
void sort(int* a, int l, int r)
{
    if (l >= r)return;
    int newl = l, newr = r, flag = a[(l + r) / 2], tmp;
    do {
        while (a[newl] < flag)newl++;
        while (a[newr] > flag)newr--;
        if (newl <= newr)
        {
            tmp = a[newl];
            a[newl] = a[newr];
            a[newr] = tmp;
            newl++;
            newr--;
        }
    } while (newl <= newr);
    if (newr > l)sort(a, l, newr);
    if (newl < r)sort(a, newl, r);
}

by 野生小卒 @ 2022-07-30 21:28:40

有没有一种可能 你数组开小了一位


by 野生小卒 @ 2022-07-30 21:29:50

改了之后会TLE,可以考虑一下有没有办法把两个递归调用分支的其中一个优化掉


by Leibyi_233 @ 2022-07-30 23:13:15

@野生小卒 我试试谢谢大佬


|