w6-3 怪物的身高(快速排序)

发布时间 2023-04-19 21:52:26作者: lijunjie03
#include <iostream>
using namespace std;
int N,m,A[5000005];
//用scanf,printf卡常
template<class T>
void QuickSort(T a[],int first,int end){
    int i=first,j=end;
    while(i<j){
        while(i<j&&a[i]<a[j]){//寻找比a[i]大的第一个数
            j--;
        }
        if(i<j){
            swap(a[i++],a[j]);//交换且i往前
        }
        while(i<j&&a[i]<a[j]){//寻找比a[j]小的第一个数
            i++;
        }
        if(i<j){
            swap(a[i],a[j--]);//交换且j往后
        }
    }
    if(m<j) QuickSort(a,first,--j);//当要排的位数小于j,在前半部分找
    else if(i<m) QuickSort(a,++i,end);
    else{
        printf("%d",a[j]);//当当前找的就是第m位输出并退出
        exit(0);
    }
}
int main() {
    scanf("%d%d",&N,&m);
    for(int i=0;i<N;++i){
        scanf("%d",&A[i]);
    }
    QuickSort(A,0,N-1);
    return 0;
}