Pagini recente » Cod sursa (job #2235499) | Cod sursa (job #2006461) | Cod sursa (job #890708) | Cod sursa (job #2353315) | Cod sursa (job #1871104)
#include<cstdio>
#include<cstdlib>
#include<ctime>
#define NMAX 3000002
using namespace std;
int v[NMAX], n, k;
int Divide(int p, int q)
{
int left = p, right = q,aux;
int pivot = v[p + rand()%(q-p+1)];
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;
}
void QuickSelect(int left, int right)
{
int mid = Divide(left,right);
if(mid == k-1)return;
if(mid < k-1) QuickSelect(mid+1,right);
else QuickSelect(left,mid-1);
}
int main()
{
int i;
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(0));
QuickSelect(0,n-1);
fprintf(fout,"%d\n",v[k-1]);
fclose(fout);
return 0;
}