Cod sursa(job #2669947)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 8 noiembrie 2020 15:14:29
Problema Statistici de ordine Scor 70
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#include <stdlib.h>

int v[3000000];

int quickselect(int pmin, int pmax, int poz){
  int b, e, aux, p;
  while(pmin < pmax){
    p = v[(pmin + pmax) / 2];
    b = pmin;
    e = pmax;
    while(v[b] < p){
      b++;
    }
    while(v[e] > p){
      e--;
    }
    while(b < e){
      aux = v[b];
      v[b] = v[e];
      v[e] = aux;
      do{
        b++;
      }while(v[b] < p);
      do{
        e--;
      }while(v[e] > p);
    }
    if(poz <= e){
      pmax = e;
    }else{
      pmin = e + 1;
    }
  }
  return v[poz];
}

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