Cod sursa(job #1287771)

Utilizator thinkphpAdrian Statescu thinkphp Data 7 decembrie 2014 23:30:25
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#define FIN "algsort.in"
#define FOUT "algsort.out"

using namespace std;

typedef unsigned int uint;

pair<uint*,uint> read() {

      uint n;

      ifstream fin( FIN );

      fin>>n;      

      uint* vec = new uint[ n ];

      for(uint i = 0; i < n; i++) fin>>vec[i];

      fin.close();

      return make_pair(vec, n);
};

void _qsort(uint *p, int li, int ls) {

      int i = li,
          j = ls,
          piv = p[(li+ls)>>1], 
          aux;  

     while(i<=j) {

           while(p[i]<piv) i++;

           while(p[j]>piv) j--;

           if(i<=j) aux = p[i]^p[j], p[i] = aux^p[i], p[j] = aux^p[j], i++, j--;           
     } 

     if(li<j) _qsort(p,li,j);

     if(i<ls) _qsort(p,i,ls);
};

void sort(uint *p, uint n) {

     _qsort(p, 0, n - 1);    
};

void write(uint *p, uint n) {

     ofstream fout( FOUT );

     for(uint i = 0; i < n; ++i) fout<<p[ i ]<<" ";
};

int main() {

    pair<uint*, int> p;

    p = read();

    sort(p.first, p.second);

    write( p.first, p.second);      

    delete p.first;

    return(0);
};