Cod sursa(job #962791)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 15 iunie 2013 17:50:28
Problema Statistici de ordine Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define N 3000000
int x[N];
int part(int v[N], int begin, int end)
{
    int b=begin-1,e=end+1,pivot=v[begin+(rand()%(end-begin+1))];
    while(b<e)
    {
        do
        {
            b++;
        } while(v[b] < pivot);

        do
        {
            e--;
        } while(pivot < v[e]);
        if(b<e)
        {
            int aux=v[b];
            v[b]=v[e];
            v[e]=aux;
        }
    }
    return e;
}
int n;
int sel(int *v,int begin,int end,int k)
{
    int pivot=part(v,begin,end);
    int lung=pivot-begin+1;
    if(begin==end)
        return v[begin];
    if(k<lung)
        return sel(v,begin,pivot,k);
    else
        return sel(v,pivot+1,end,k-lung);
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("sdo.in","r");
    fout=fopen("sdo.out","w");
    int i,k;
    fscanf(fin,"%d%d",&n,&k);
    for(i=0; i<n; i++)
        fscanf(fin,"%d",&x[i]);
    srand(time(NULL));
    fprintf(fout,"%d",sel(x,0,n-1,k-1));
    return 0;
}