#include <stdio.h>
#include <time.h>

#define SIZE 3

int A[SIZE];

void quicksort(int A[], int p, int r);
int partition (int A[], int p, int r);
void swap(int *i, int *j);

void quicksort(int A[], int p, int r)
{
  int q;

  if (p < r) {
    q = partition(A,p,r);
    quicksort(A,p,q);
    quicksort(A,q+1,r-1);
  }

}

int partition (int A[], int p, int r)
{
  int x, i, j;

  x = A[p];
  i = p - 1;
  j = r+1;

  while (1) {
    do {
      j = j - 1;
      printf("A[j]:%d j:%d x:%d\n", A[j],j, x); 
    } while (A[j] <= x);

    do {
      i = i + 1;    
      printf("A[i]:%d j:%d x:%d\n", A[i], i, x); 
    } while (A[i] >= x);

    if (i < j) {
      printf("SWAP\n");
      swap(&i,&j);
    }
    else
      return j;
  }
}

void swap(int *i, int *j)    
{    
    int t; 
    t = *i;    
    *i = *j;    
    *j = t;  
} 

int main(void)
{
  int x, j, start, finish;

  srand(time(NULL));
  /*  for(j=0; j<SIZE; j++)
    A[j] = rand() % 100;
  */

  A[0] = 3;
  A[1] = 1;
  A[2] = 2;

  printf ("Array before = \n");
  for(x=0; x<SIZE; x++)
    printf ("%d ", A[x]);
  printf("\n");

  quicksort(A,1,SIZE-1);

  printf ("\nArray after = \n");
  for(x=0; x<SIZE; x++)
    printf("%d ", A[x]);
  printf("\n");

  return 0;
}






