Pagini recente » Cod sursa (job #2790601) | Cod sursa (job #1000557) | Cod sursa (job #194338) | Cod sursa (job #66822) | Cod sursa (job #1871068)
#include<cstdio>
#include<cstdlib>
#include<ctime>
#define NMAX 3000000
using namespace std;
int v[NMAX], n, k;
int Divide(int p, int q)
{
int left = p, right = q, pivot = v[p + (rand() % (q-p+1))], aux;
while(left < right)
{
while(v[left] < pivot) left++;
while(v[right] > pivot) right--;
if(left < right)
{
aux = v[left];
v[left] = v[right];
v[right] = aux;
}
}
return left;
}
int QuickSelect(int left, int right)
{
int mid = Divide(left,right);
if(mid == k-1) return v[mid];
if(mid < k-1) return QuickSelect(mid+1,right);
else return QuickSelect(left,mid-1);
}
int main()
{
int i, nr;
FILE *fin, *fout;
fin = fopen("sdo.in","r");
fout = fopen("sdo.out","w");
fscanf(fin,"%d%d",&n,&k);
for(i=0; i<n; i++)
fscanf(fin,"%d",&v[i]);
fclose(fin);
srand(time(NULL));
nr = QuickSelect(0,n-1);
fprintf(fout,"%d\n",nr);
fclose(fout);
return 0;
}