Pagini recente » Cod sursa (job #1544382) | Cod sursa (job #1124820) | Cod sursa (job #1587005) | Cod sursa (job #2000816) | Cod sursa (job #962791)
Cod sursa(job #962791)
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define N 3000000
int x[N];
int part(int v[N], int begin, int end)
{
int b=begin-1,e=end+1,pivot=v[begin+(rand()%(end-begin+1))];
while(b<e)
{
do
{
b++;
} while(v[b] < pivot);
do
{
e--;
} while(pivot < v[e]);
if(b<e)
{
int aux=v[b];
v[b]=v[e];
v[e]=aux;
}
}
return e;
}
int n;
int sel(int *v,int begin,int end,int k)
{
int pivot=part(v,begin,end);
int lung=pivot-begin+1;
if(begin==end)
return v[begin];
if(k<lung)
return sel(v,begin,pivot,k);
else
return sel(v,pivot+1,end,k-lung);
}
int main()
{
FILE *fin,*fout;
fin=fopen("sdo.in","r");
fout=fopen("sdo.out","w");
int i,k;
fscanf(fin,"%d%d",&n,&k);
for(i=0; i<n; i++)
fscanf(fin,"%d",&x[i]);
srand(time(NULL));
fprintf(fout,"%d",sel(x,0,n-1,k-1));
return 0;
}