#include <stdio.h>
void quick(int a[],int left,int right)
{
	int iL,iR,iM;
	int midData,t;
	iM = (left + right)/2;
	midData = a[iM];	//枢軸値(値をメモル)を決定
	for(iL = left,iR = right; iL <= iR ;  ){	//小さい集合と大きい集合へ分ける
		while(a[iL] < midData) iL++;	//枢軸値以上の交換対象になる要素の添え字を取得
		while(a[iR] > midData) iR--;	//枢軸値以下の交換対象になる要素の添え字を取得
		if(iL <= iR){
			t = a[iL];		//交換
			a[iL] = a[iR]; 
			a[iR] = t;
			iL++;
			iR--;
		}
	}
	if(left < iR) quick(a,left,iR);
	if(iL < right) quick(a,iL,right);
}
void main()
{
	int i;
	int a[] = {0,13, 8, 1, 17, 7, 4 , 9 , 3, 2};
	for(i = 1; i < 10; i++)
		printf("%d  ",a[i]);
	printf("\n");
	quick(a,1,9);
	for(i = 1; i < 10; i++)
		printf("%d  ",a[i]);
	printf("\n");
}