Cod sursa(job #257035)

Utilizator alecmanAchim Ioan Alexandru alecman Data 12 februarie 2009 18:35:18
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>

#define INPUT "algsort.in"
#define OUTPUT "algsort.out"
#define NMAX 500001

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

long N;
long A[ NMAX ];

inline void twist(long &__X, long &__Y)
{
  __X = __X + __Y;
  __Y = __X - __Y;
  __X = __X - __Y;
}

void quick(long st, long dr)
{
  long l = st, m = dr;

  while(l != m)
  {
    if((l<m && A[ l ] > A[ m ]) || (l > m && A[ l ] < A[ m ]))
    {
      twist(A[ l ], A[ m ]);
      twist(l, m);
    }

    m = ( l < m ) ? ( m - 1 ) : ( m + 1);
  }

  if( l != st) quick(st, l - 1);
  if( l != dr) quick(l + 1, dr);
}

void readData()
{
  fscanf(fin, "%ld", &N);

  for(long i = 0; i < N; ++i)
    fscanf(fin, "%ld", A+i);
}

int main()
{
  readData();

  quick(0, N - 1);

  for(long i = 0; i < N; ++i)
    fprintf(fout, "%ld ", A[ i ]);

  fclose(fin);
  fclose(fout);

  return 0;
}