Pagini recente » Cod sursa (job #2301066) | Cod sursa (job #1459439) | Cod sursa (job #1746277) | Cod sursa (job #1071387) | Cod sursa (job #924049)
Cod sursa(job #924049)
#include<stdio.h>
#include<ctime>
#include <cstdlib>
#include<iostream>
using namespace std;
#define max 3000002
int v[max],n,k;
int part(int left,int right)
{
int i=left-1,j=right+1,mid=(left+(rand()%(right-left+1)));
while(1)
{
do
{
i++;
}
while(v[i]<v[mid]);
do
{
j--;
}
while(v[j]>v[mid]);
if(i<j)
swap(v[i],v[j]);
else
return j;
}
return 0;
}
void quicksort(int left,int right,int k)
{
if(left==right)
return;
int p=part(left,right);
int t=p-left+1;
if(t >= k )
quicksort(left,p,k);
else
quicksort(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(1,n,k);
printf("%d",v[k]);
}