Pagini recente » Cod sursa (job #561016) | Cod sursa (job #1127516) | Cod sursa (job #2441048) | Cod sursa (job #2895227) | Cod sursa (job #924052)
Cod sursa(job #924052)
#include<stdio.h>
#include<ctime>
#include <cstdlib>
#include<iostream>
using namespace std;
#define max 3000002
int v[max],n,k;
int part(int v[max],int left,int right)
{
int i=left-1,j=right+1,mid=v[(left+(rand()%(right-left+1)))];
while(1)
{
do
{
i++;
}
while(v[i]<mid);
do
{
j--;
}
while(mid<v[j]);
if(i<j)
swap(v[i],v[j]);
else
return j;
}
return 0;
}
void quicksort(int v[max],int left,int right,int k)
{
if(left==right)
return;
int p=part(v,left,right);
int t=p-left+1;
if(t >= k )
quicksort(v,left,p,k);
else
quicksort(v,p+1,right,k-t);
}
int main()
{
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d %d",&n,&k);
time_t t;
time(&t);
srand(t);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
quicksort(v,1,n,k);
printf("%d",v[k]);
}