Cod sursa(job #545212)

Utilizator slycerdan dragomir slycer Data 2 martie 2011 21:37:31
Problema Statistici de ordine Scor 50
Compilator c Status done
Runda Arhiva educationala Marime 1.14 kb
/* 
 * File:   main.c
 * Author: slycer
 *
 * Created on March 2, 2011, 11:20 PM
 */

#include <stdio.h>
#include <stdlib.h>

/*
 * 
 */
int data[3000001]; 
int swap( int i, int j){
    int aux = data[i]; 
    data[i] = data[j]; 
    data[j] = aux; 
}
int main(int argc, char** argv) {

    FILE * in = fopen("sdo.in","r"); 
    FILE * out = fopen("sdo.out","w"); 
    
    int n,k; 
    fscanf(in,"%d%d",&n,&k); 
    
    int i;
    for ( i=1; i<=n; i++){
        fscanf(in,"%d",&data[i]); 
       // printf("%d ",data[i]); 
    }
    
    int left = 1; 
    int right = n; 

    while (left <= right) {
        int pivot = left + random() % (right - left + 1);
        swap(pivot, right);
        int j = left;
        for (i = left; i < right; i++) {
            if (data[i] <= data[right]) {
                swap(i, j);
                j++;
            }
        }
        swap(j, right);

        if ( j == k ){
            fprintf(out,"%d",data[k]); 
            break; 
        }
        if ( j<k){
            left = j+1; 
        } else{
            right = j-1; 
        }

    }
    
    fclose( in ); 
    fclose ( out ); 
    return (EXIT_SUCCESS);
}