#include <stdio.h>

void swap(int*,int*);
void quicksort(int, int, int*);

#define N 8
static int a[N] = { 5, 1, 3, 6, 2, 4, 8, 7 };

main() {
{ int i; printf("     "); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); }
	quicksort(0,N-1,a);
}

void quicksort(int lo, int hi, int a[]) {
	int i,j,x;

	if (lo < hi) {
		i = lo;
		j = hi;
		x = a[i];

		while(i<=j) {
			while (a[i]<x) i++;
			while (a[j]>x) j--;
			if (i<=j) {
				swap(&a[i],&a[j]);
{ int i; printf("%d %d: ",lo,hi); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); }
				i++; j--;
			}
		}
		quicksort(lo,j,a);
		quicksort(i,hi,a);
	}
}

void swap(int *x, int *y) {
	int z;

	z = *x;
	*x = *y;
	*y = z;
}