Cod sursa(job #1184810)

Utilizator Cezar_MihalceaCezar Mihalcea Cezar_Mihalcea Data 14 mai 2014 09:52:24
Problema Statistici de ordine Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
#include<stdlib.h>
FILE *in,*out;
int v[3000001];
void schimb(int &a,int &b)
{
    int aux;
    aux=a;
    a=b;
    b=aux;
}
int part(int st,int dr)
{
    int i,j;
    i=st+rand()%(dr-st+1);
    j=st;
    for(i=st;i<dr;i++)
    {
        if(v[i]<v[dr])
            schimb(v[j++],v[i]);
    }
    schimb(v[j],v[dr]);
    return j;
}
void qs2(int st,int dr,int poz)
{
    if(st>=dr)
        return;
    int p=part(st,dr);
    if(poz<p)
        qs2(st,p-1,poz);
    if(poz>p)
        qs2(p+1,dr,poz);
}
int main()
{
    in=fopen("sdo.in","r");
    out=fopen("sdo.out","w");
    int n,i,k;
    fscanf(in,"%d%d",&n,&k);
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d",&v[i]);
    }
    qs2(1,n,k);
    fprintf(out,"%d",v[k]);
    return 0;
}