Pagini recente » Cod sursa (job #1640610) | Cod sursa (job #2671051) | Cod sursa (job #375342) | Cod sursa (job #2363278) | Cod sursa (job #2061220)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define dmx 3000000
int v[dmx];
int prt(int lo, int hi)
{
int i,j,x,aux;
/*x=lo+(rand()%(hi-lo+1));
aux=v[x];
v[x]=v[lo];
v[lo]=aux;*/
x=v[lo];
i=lo-1;
j=hi+1;
while (true)
{
do
{
i++;
}
while(v[i] < x);
do
{
j--;
}
while(v[j] > x);
if (i < j)
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
else
return j;
}
}
void qselect(int lo, int hi, int k)
{
int p,lg;
if (lo == hi)
return;
p=prt(lo,hi);
lg=p-lo+1;///in lg tin minte cate elemente am in subvectorul stang
if (k <= lg)
qselect(lo,p,k);
else
qselect(p+1,hi,k-lg);
}
int main()
{
FILE *f;
int n,k,i;
f=fopen("sdo.in","r");
fscanf(f,"%d%d",&n,&k);
for (i=0; i<n; i++)
fscanf(f,"%d",&v[i]);
fclose(f);
srand(time(NULL));
qselect(0,n-1,k-1);
f=fopen("sdo.out","w");
fprintf(f,"%d",v[k-1]);
fclose(f);
}