I - 第k小的数
Description
现有一个包含n个整数(1<=n<=900000)的无序序列(保证序列内元素各不相同),输入一个整数k(1<=k<=n),请用较快的方式找出该序列的第k小数并输出。
Input
第一行先输入两个整数,n和k。
接下来是一行输入n个由空格分开的互不相同的整数num(1<=num<=90000000)。
Output
输出该组数据中第k小的数num。
Input
6 4
3 2 5 1 4 6
Output
4
#include <iostream>
#include <bits/stdc++.h>
int a[900110];
using namespace std;
void sqort(int a[],int l,int r)
{
int key=a[l];
int i=l,j=r;
if(l>=r)
return ;
while(i<j)
{
while(i<j&&a[j]>=key)j--;
a[i]=a[j];
while(i<j&&a[i]<=key)i++;
a[j]=a[i];
}
a[i]=key;
sqort(a,l,i-1);
sqort(a,i+1,r);
}
int main()
{
int n,k,i;
scanf("%d %d",&n,&k);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sqort(a,0,n-1);
printf("%d",a[k-1]);
return 0;
}