Cod sursa(job #1019441)

Utilizator Emanuel9Dumitru Emanuel Cristian Emanuel9 Data 31 octombrie 2013 08:40:03
Problema Statistici de ordine Scor 30
Compilator c Status done
Runda Arhiva educationala Marime 1.03 kb
#include "stdio.h"
#include "stdlib.h"

int v[3000000],n,poz;

int qs(int s,int d)
{
    if(s<d){
        int aux;
        int i=s;
        int j=d;
        int  pivot = v[(s+d)/2];

        for(;;){

            while(v[i]<pivot){
                i++;
            }
            while(v[j]>pivot){
                j--;
            }
            if(i<=j){
                aux=v[i];
                v[i]=v[j];
                v[j]=aux;
                i++;
                j--;
            }else
                return j;
        }
    }
}

void search(int s,int d){

    if(s<d){
        int pivot = qs(s,d);
        if(pivot>=poz)
            search(s,pivot);
        else
            search(pivot+1,d);

    }
}
int main()
{
    freopen("sdo.in", "r", stdin);
    freopen("sdo.out", "w", stdout);

    scanf("%d%d", &n,&poz);
    int i;
    for (i=1; i<=n; i++){
        scanf("%d", &v[i]);
    }
    search(1,n);
    printf("%d",v[poz]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}