Cod sursa(job #658589)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 9 ianuarie 2012 09:43:23
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#define nmax 500000
#define BUF 100010

int v[nmax];

char buffer[BUF];
int poz=BUF-1;
FILE *fin;

void cit(int &n){
   n=0;
   poz++;
   if(poz==BUF){
     poz=0;
     //citesc o noua linie
     fread (buffer,sizeof(char),BUF,fin);
   }
   while(buffer[poz]>='0' && buffer[poz]<='9'){
      n=n*10+(buffer[poz]-'0');
      poz++;
      if(poz==BUF){
       poz=0;
       //citesc o noua linie
       fread (buffer,sizeof(char),BUF,fin);
      }
   }
}


int punct_sa(int li, int ls){
   int i=1,j=0;
   int aux;
   while(li<ls){
      if(v[li]>v[ls]){
         aux=v[li];
         v[li]=v[ls];
         v[ls]=aux;

         aux=i;
         i=-j;
         j=-aux;
      }
      li+=i;
      ls+=j;
   }
  return li;
}

void sortare(int li, int ls){
   int k;
   if(li<ls){
      k=punct_sa(li,ls);
      sortare(li,k-1);
      sortare(k+1,ls);
   }

}

int main(){
  fin=fopen("algsort.in","r");
  int n;
  int i;
  cit(n);
  //printf("%d\n",n);
  for(i=0;i<n;i++){cit(v[i]);/*printf("%d ",v[i]);*/}
  fclose(fin);
  sortare(0,n-1);
  FILE *fout=fopen("algsort.out","w");
  for(i=0;i<n;i++){fprintf(fout,"%d ",v[i]);}
  fclose(fout);

return 0;
}