Cod sursa(job #2824379)

Utilizator mircea_007Mircea Rebengiuc mircea_007 Data 1 ianuarie 2022 23:24:22
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#include <ctype.h>

#define MAXN 500000

int v[MAXN];

void myqsort( int begin, int end ){
  int b = begin - 1, e = end + 1, p = v[(begin + end) / 2], aux;
  
  while( v[++b] < p );
  while( v[--e] > p );
  
  while( b < e ){
    aux = v[b];
    v[b] = v[e];
    v[e] = aux;
  
    while( v[++b] < p );
    while( v[--e] > p );
  }
  
  if( begin < e )
    myqsort(begin, e);
  if( e + 1 < end )
    myqsort(e + 1, end);
}

FILE *fin, *fout;

static inline int fgetint(){
  int n = 0, ch;
  
  while( !isdigit(ch = fgetc(fin)) );
  do
    n = n * 10 + ch - '0';
  while( isdigit(ch = fgetc(fin)) );
  
  return n;
}

int main(){
  fin  = fopen("algsort.in",  "r");
  fout = fopen("algsort.out", "w");
  
  int n, i;
  
  n = fgetint();
  for( i = 0 ; i < n ; i++ )
    v[i] = fgetint();
  
  myqsort( 0, n - 1 );
  
  fprintf(fout, "%d", v[0]);
  for( i = 1 ; i < n ; i++ )
    fprintf(fout, " %d", v[i]);
  fputc('\n', fout);
  
  fclose(fin);
  fclose(fout);
  return 0;
}