Cod sursa(job #2670064)

Utilizator Ana_22Ana Petcu Ana_22 Data 8 noiembrie 2020 20:45:55
Problema Statistici de ordine Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 3000000

int v[NMAX];

void sdo( int v[], int k, int begin, int end ) {
  int pivot = v[begin+rand()%(end-begin+1)];
  int b = begin, e = end, aux;
  while( v[b] < pivot )
    b++;
  while( v[e] > pivot )
    e--;
  while( b < e ) {
    aux = v[b];
    v[b] = v[e];
    v[e] = aux;
    do
      b++;
    while( v[b] < pivot );
    do
      e--;
    while( v[e] > pivot );
  }
  if( begin < e && k < e )
    sdo( v, k, begin, e );
  else if( e + 1 < end )
    sdo( v, k, e + 1, end );
}

int main() {
    FILE *fin, *fout;
    int n, k, i;
    char ch;
    fin = fopen( "sdo.in", "r" );
    fscanf( fin, "%d%d", &n, &k );
    k--;
    for( i = 0; i < n; i++ ) {
      while( ( ch = fgetc( fin ) ) < '0' || ch > '9' );
      while( ch >= '0' && ch <= '9' ) {
        v[i] = v[i] * 10 + ch - '0';
        ch = fgetc( fin );
      }
    }
    fclose( fin );
    sdo( v, k - 1, 0, n - 1 );
    fout = fopen( "sdo.out", "w" );
    fprintf( fout, "%d", v[k] );
    fclose( fout );
    return 0;
}