Cod sursa(job #373479)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 13 decembrie 2009 21:27:12
Problema Statistici de ordine Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
#include<time.h>
#include<cstdlib>
using namespace std;

int partition(int *a,int p,int r)
 {int temp2=rand()%(r-p+1)+p;
 int x=a[r];
  int i=p-1;
  for(int j=p;j<=r;j++) if(a[j]<x) {i++;int aux=a[j];a[j]=a[i];a[i]=aux;}
   ;int aux2=a[r];a[r]=a[i+1];a[i+1]=aux2;
   return i+1;}
int quick(int *a,int p,int r,int k)   
{if(p<r)
  {int q=partition(a,p,r);
    int temp=q-p+1; 
    if(temp==k) return a[k];
    else if(temp<k) return quick(a,q+1,r,k-temp);
         else return quick(a,p,q-1,k);
        }
     }
int main()
{int *a,n,k;
srand(time(NULL));
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d %d",&n,&k);
a=(int *)malloc((n+1)*sizeof(int));
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
quick(a,1,n,k);
printf("%d",a[k]);
    return 0;}