Cod sursa(job #2681410)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 5 decembrie 2020 13:51:03
Problema Statistici de ordine Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int v[3000000];
void sort(int begin, int end, int k){
  int b=begin, e=end, pivot=v[begin + rand()%(end- begin + 1)],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-1<=e)
    sort(begin,e,k);
  else if(e+1<end)
    sort(e+1,end,k);
}
int main(){
  int i,n,k;
  char c;
  FILE *fin, *fout;
  fin=fopen("sdo.in","r");
  fscanf(fin,"%d%d",&n,&k);

  fgetc(fin);
  c=fgetc(fin);
  for(i=0;i<n;i++){
    //fscanf(fin,"%d",&v[i]);
    v[i]=0;
    while(isdigit(c)){
      v[i]*=10;
      v[i]+=c-'0';
      c=fgetc(fin);
    }
    c=fgetc(fin);
  }
  fclose(fin);

  sort(0,n-1,k);

  fout=fopen("sdo.out","w");
  fprintf(fout,"%d\n",v[k-1]);
  fclose(fout);
  return 0;
}