#include<stdio.h>

void troca(int *x, int *y) {
 int t = *x;
 *x = *y;
 *y = t;
} /* troca */


void imprimeVetor(int *v, int n) {
  int i;
  for (i = 0; i < n; i++) 
    printf("%d ", v[i]);
  printf("\n");
}

void quick(int *v, int n) {
  imprimeVetor(v,n);
  if (n <= 1) 
    return;
  else {
    int i,j, pivot;
    pivot = v[0];
    i = 1;
    j = n-1;
    do {
      while (v[i]<pivot && i < n-1) i++;
      while (v[j]>pivot) j--;
      if (i<=j) {
	troca(&v[i],&v[j]);
	i++; j--;
      }
    } while (i<=j);
    troca(&v[i-1],&v[0]);
    imprimeVetor(v,n);
    quick(v, i-1);
    quick(&v[i], n-i);
  }
}

int  main() {
  int v[] = {5, 7, 3, 2, 0, 9, 1, 4, 6, 8};
  int v2[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
  imprimeVetor(v2,10);
  quick(v2, 10);
  imprimeVetor(v2,10);
  return 0;
}