第k个数

#include<iostream>
using namespace std;
int num[100010];

void find_k(int l , int r , int k){
    
    if(l >= r) {
        cout << num[l];
        return ;
    }
    
    int mid = (l + r + 1) >> 1;
    int x = num[mid] , i = l - 1 , j = r + 1;
    
    while(i < j){
        do i ++ ; while(num[i] < x);
        do j -- ; while(num[j] > x);
        
        if(i < j) swap(num[i] , num[j]);
    }


    if( i > k) find_k(l , i - 1 , k);
    else find_k(i , r , k);
    
}

int main(){
    
    int n , k; 
    cin >> n >> k;
    for(int i = 0 ; i < n ; i ++) cin >> num[i];
    
    find_k(0 , n - 1 , k - 1);
    
    return 0;
}
posted @ 2024-10-24 11:38  _l_x_y  阅读(1)  评论(0编辑  收藏  举报