Cod sursa(job #456209)

Utilizator Smaug-Andrei C. Smaug- Data 14 mai 2010 23:26:28
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 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, j;

  if(left >= right)
    return;

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

  while(i < equal){
    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+1, 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");

}