Pagini recente » Cod sursa (job #2870819) | Cod sursa (job #2496974) | Cod sursa (job #2275326) | Cod sursa (job #2189670) | Cod sursa (job #662667)
Cod sursa(job #662667)
#include<stdio.h>
#include<time.h>
#include<stdlib.h>//libraria in care e rand
int partitie(int A[],int st,int dr)
{
int x=A[dr];
int i=st-1;
for(int j=st;j<dr;j++)
if(A[j]<=x)
{
i++;
A[i]=A[i] + A[j] -(A[j]=A[i]);
}
A[i+1]=A[i+1] + A[dr] - (A[dr]=A[i+1]);
return i+1;
}
int partitie_random(int A[],int st,int dr)
{
int y=rand() %dr;
A[dr]=A[dr] + A[y] - (A[y]=A[dr]);//interschimbare
return partitie(A,st,dr);
}
int gasire(int A[],int st,int dr,int x)
{
if(st==dr)
return A[st];
int q=partitie(A,st,dr);
int k=q-st+1;
if(x==k)
return A[x];
if(x<k)
return gasire(A,st,q-1,x);
return gasire(A,q+1,dr,x-k);
}
int main()
{
srand(time(NULL));
FILE *f=fopen("sdo.in","rt");
FILE *g=fopen("sdo.out","wt");
int A[300000],n,x,i;
fscanf(f,"%i%i",&n,&x);
for(i=1;i<=n;i++)
fscanf(f,"%i",&A[i]);
fprintf(g,"%i",gasire(A,1,n,x));
return 0;
}