Cod sursa(job #1245865)

Utilizator thinkphpAdrian Statescu thinkphp Data 20 octombrie 2014 09:57:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <cstdio>
#define MAXN 500005
#define FIN "algsort.in"
#define FOUT "algsort.out"

using namespace std;

int arr[MAXN],
    n,
    *x;

class QUICKSORT {

      public: 
      int *p, 
           n;
  
      QUICKSORT(int arr[], int num) {
 
          p = arr;  
          n = num;

      }
      
      void sort() {
 
           _quicksort(0, n - 1);
      } 

      int* get() {

           return p;
      }
 
      private:
      void _quicksort(int li, int ls) {

           int i,
               j,
               x,piv;

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

               while(i<=j) {

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

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

                     if( i<=j ) {
                         x = p[i]^p[j]; p[i] = x^p[i]; p[j] = x^p[j];
                         i++;j--;  
                     }
               }

               if(li<j) _quicksort(li,j);
               if(i<ls) _quicksort(i,ls);
      }
};

//function prototypes
void read();
void write();

int main() {

    read(); 
     
    QUICKSORT quick( arr, n ); 

    quick.sort();

    x = quick.get();

    write();

    return(0);
};

void read() {

    freopen(FIN, "r", stdin);

    scanf("%d", &n); 

    for(int i = 0; i < n; i++ ) scanf("%d ", &arr[ i ]);

    fclose( stdin );
};

void write() {

    freopen(FOUT, "w", stdout);

    for(int i = 0; i < n; i++ ) printf("%d ", x[ i ]);

    fclose( stdout );
}