Cod sursa(job #1435715)

Utilizator cella.florescuCella Florescu cella.florescu Data 14 mai 2015 10:26:20
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>
#include <stdlib.h>
#define LIM 2097152
int p=LIM-1;
char s[LIM], auxx[200];
#define auxx (auxx+3)
FILE *fin;

inline void avans(){
  if(++p==LIM){
    fread(s, LIM, 1, fin);
    p=0;
  }
}

inline int getnr(){
  while(auxx[s[p]]==0)
    avans();
  int nr=0;
  while(auxx[s[p]]==1){
    nr=nr*10+s[p]-'0';
    avans();
  }
  return nr;
}

int v[500000];

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

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