Cod sursa(job #456382)

Utilizator Smaug-Andrei C. Smaug- Data 15 mai 2010 14:09:44
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>

inline void swap(unsigned a[], int x, int y){
  static unsigned aux;
  aux = a[x];
  a[x] = a[y];
  a[y] = aux;
}

void qsort(unsigned a[], int left, int right){

  int i, last, equal;

  if(left >= right)
    return;

  swap(a, right, (left+right)/2);
  
  last = left; equal = right; i = left;

  while(i < equal){

    /*for(int j = left; j <= right; j++)
      printf("%u ", a[j]);
      printf("\n");*/

    if(a[i] < a[equal])
      swap(a, last++, i++);
    else if(a[i] == a[equal])
      swap(a, i, --equal);
    else
      i++;
  }

  int aux = last;
  for(i = equal; i <= right; i++)
    swap(a, last++, i);
  
  //printf("\n");  

  //swap(a, left, last);

  qsort(a, left, aux-1);
  qsort(a, last, right);

}

int main(){

  freopen("algsort.in", "r", stdin);
  freopen("algsort.out", "w", stdout);

  int i, n;
  unsigned a[500000];

  scanf("%d", &n);
  for(i = 0; i < n; i++)
    scanf("%u", a+i);

  qsort(a, 0, n-1);

  for(i = 0; i < n; i++)
    printf("%u ", a[i]);
  printf("\n");

}