#include <stdio.h>
#include <stdlib.h>

#define XORSWAP(a, b)	((a)^=(b),(b)^=(a),(a)^=(b))

int partition(int v[], int left, int right){
	int i, j, p;

	p = v[left];
	i = left;
	j = right + 1;
	while(i < j){
		while(v[i] < p) i++;
		while(v[j] > p) j--;
		XORSWAP(v[i], v[j]);
	}
	XORSWAP(v[i], v[j]);
	XORSWAP(v[left], v[j]);
	return j;
}

void quicksort(int v[], int left, int right){
	if(left < right){
		int s = partition(v, left, right);
		quicksort(v, left, s - 1);
		quicksort(v, s + 1, right);
	}
}

int main(){
	int i;
	int v[10] = {7, 3, 1, 2, 5, 10, 9, 7, 8, 6};
	
	quicksort(v, 0, 9);
	for(i = 0; i < 10; i++)
		printf("%d ", v[i]);

	scanf("%d", &i);
}