第k小数
第k小数
https://ac.nowcoder.com/acm/problem/207028
//快排思想 //快读 #include <bits/stdc++.h> using namespace std; typedef long long ll; int arr[5000005]; inline int read(){ int x = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if (ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9'){ x = (x<<1) + (x<<3) + (ch^48); ch = getchar(); } return x * f; } int qs(int l,int r,int k) { if(l==r) return arr[l]; int mid=(l+r)>>1; int x=arr[mid]; int i=l,j=r; while(i<=j) { while(arr[i]<x) i++; while(arr[j]>x) j--; if(i<=j) { swap(arr[i],arr[j]); i++;j--; } } if(k<=j) return qs(l,j,k); else if(k>=i) return qs(i,r,k); else return arr[k]; } int main() { int T; T=read(); while(T--) { int n,k; n=read();k=read(); int i; for(i=1;i<=n;i++) arr[i]=read(); cout<<qs(1,n,k)<<endl;; } }