#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> const int MAXN = 10000; int N; int a[MAXN]; int K; int partition(int l,int r) { int key = a[l]; while ( l < r ) { while ( l < r && a[r] >= key ) r--; a[l] = a[r]; while ( l < r && a[l] <= key ) l++; a[r] = a[l]; } a[l] = key; return l; } void qsort(int l,int r) { //quick sort if ( l < r ) { int mid = partition(l,r); qsort(l,mid - 1); qsort(mid + 1,r); } } int kth(int l,int r,int k) { //返回a[l]与a[r]之间第k小的数 if ( l < r ) { int mid = partition(l,r); if ( mid - l + 1 == k ) return a[mid]; else if ( k > mid - l + 1 ) return kth(mid + 1,r,k - mid + l - 1); else return kth(l,mid - 1,k); } } int main() { scanf("%d",&N); srand(time(NULL)); for (int i = 0; i < N; i++) a[i] = rand() % 100; qsort(0,N - 1); for ( i = 0; i < N; i++) printf("%d ",a[i]); printf("\n"); while ( scanf("%d",&K) == 1 ) { if ( K > N ) exit(0); int ans = kth(0,N - 1,K); printf("第%d小 : %d\n",K,ans); } return 0; }