Cod sursa(job #1133542)

Utilizator vladradu2014Radu Vlad Alexandru vladradu2014 Data 4 martie 2014 23:35:38
Problema Statistici de ordine Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
#include <malloc.h>
#include <string.h>

void swap(int* v,int i,int j){
 int aux=v[i];
 v[i]=v[j];
 v[j]=aux;
}

int giveel(int* v,int c, int start,int end){
 int med=start+(end-start)/2;
 int fin_med=med;
 int i=start;
 int j=end;
 while(i<=j){
     while(v[i]<v[med]){
         ++i;
     }
     while(v[j]>v[med]){
         --j;
     }
     if(i<=j){
         if(i==fin_med);
           fin_med=j;
         if(j==med)
           fin_med=i;
         swap(v,i,j);
         ++i;
         --j;
     }
 }
 if(fin_med==c)
     return v[fin_med-1];
 else
    if(c>fin_med)
      return giveel(v,c,fin_med+1,end);
    else
      return giveel(v,c,start,fin_med-1);
}


int main()
{
   int N,C;
   int i;
   int *v;
   freopen("sdo.in","r",stdin);
   freopen("sdo.out","w",stdout);
   scanf("%d%d",&N,&C);
   v=(int*)malloc(sizeof(int)*N);
   for(i=0;i<N;i++)
     scanf("%d",&v[i]);
   printf("%d",giveel(v,C,0,N-1));
   return 0;
}