80分,一直wa第二个点求助 !
查看原帖
80分,一直wa第二个点求助 !
116495
GMU_QinYuCheng楼主2023/1/7 17:45
#include <bits/stdc++.h>

using namespace std;

const int N = 5000100;

int n, k, a[N];

void quicksort(int l, int r, int k)
{
    
    if(l >= r) return;
    swap(a[l], a[l + rand() % (r - l + 1)]);
    int x = a[l];//取值
    int i = l, j = r;//取i,j指针
    while(i < j)//只要i和j没有相遇
    {
        while(i < j && a[j] > x) j--;//j从右往做找小于等于x的数
        if(i < j) a[i++] = a[j];
        while(i < j && a[i] < x) i++;//i从左往右找大于等于x的数
        if(i < j) a[j--] = a[i];
    }
    a[i] = x;//最后把x归位
    if(i == k) {
        printf("%d", a[i]);
        return;
    }
    if(k < i) quicksort(l, i - 1, k);//递归右区间
    else if(k > i) quicksort(i + 1, r, k);//递归左区间
}
int main()
{
    scanf("%d%d", &n, &k);
    k++;
    for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);
    if(n == 1) cout << a[1];
    else{
        quicksort(1, n, k);
    }
    
    return 0;
}
2023/1/7 17:45
加载中...