Cod sursa(job #1821444)

Utilizator tgm000Tudor Mocioi tgm000 Data 3 decembrie 2016 08:30:35
Problema Statistici de ordine Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<cstdio>
#include<cstdlib>
#include<ctime>
int v[3000001];
void swap(int &a,int &b){
   int aux=a;
   a=b;
   b=aux;
}
int pivot(int st,int dr,int p){
   int i=st,j=dr,val=v[p];
   while(i<=j){
      while(v[i]<val)
         i++;
      while(v[j]>val)
         j--;
      if(i<j){
         swap(v[i],v[j]);
         i++;
         j--;
      }else
         return i;
   }
}
void quicksort(int st,int dr,int k){
   if(st==dr)
      return;
   int p=st+rand()%(dr-st+1);
   int poz=pivot(st,dr,p);
   if(k<poz)
      quicksort(st,poz-1,k);
   else if(k>poz)
      quicksort(poz+1,dr,k);
}
int main(){
   srand(time(0));
   int n,k,i;
   freopen("sdo.in","r",stdin);
   freopen("sdo.out","w",stdout);
   scanf("%d%d",&n,&k);
   for(i=1;i<=n;i++)
      scanf("%d",&v[i]);
   quicksort(1,n,k);
   printf("%d",v[k]);
   return 0;
}