求助!二分做的,但不清楚为什么1,3WA了!!!

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

天才美少女 @ 2021-09-07 14:32:38

#include<bits/stdc++.h>
using namespace std;
int a[5000010],n,k;
int search(int low,int high){
     int mid,l=low,r=high,tmp;
     mid=a[(low+high)/2];
     while(l<r){
        while(mid>a[l])l++;
        while(mid<a[r])r--;
        if(l<=r){
            tmp=a[l];
            a[l]=a[r];
            a[r]=tmp;
            l++;
            r--;
         }
     }
     if(a[k]==mid)return mid;
     else if(a[k]<mid)search(low,r);
     else search(l,high); 
}
int main(void){
    cin>>n>>k;
    for(int i=0;i<n;i++)scanf("%d",&a[i]);
    cout<<search(0,n-1);
    return 0; 
}

by 天才美少女 @ 2021-09-07 14:33:26

代码如上,自己试了挺多数据都过了,但不知道哪里出问题了导致1,3过不了


by 一Iris一 @ 2021-09-07 15:29:14

你这个二分求第 k 大给我看傻了


by A1443356159 @ 2021-09-07 15:55:48

nth_element


|