public class QSortAlgorithm 
{
    void sort(int a[], int lo0, int hi0) throws Exception {
	int lo = lo0;
	int hi = hi0;

	if (lo >= hi) {
	    return;
	}
	int mid = a[(lo + hi) / 2];
	while (lo < hi) {
	    while (lo<hi && a[lo] > mid) {
		lo++;
	    }
	    while (lo<hi && a[hi] >= mid) {
		hi--;
	    }
	    if (lo < hi) {
		int T = a[lo];
		a[lo] = a[hi];
		T = a[hi];
	
	    }
	}
	if (hi < lo) {
	    int T = hi;
	    hi = lo;
	    lo = T;
	}
	sort(a, lo0, lo);
	sort(a, lo == lo0 ? lo+1 : lo, hi0);
    }

    void sort(int a[]) throws Exception {
	sort(a, 0, a.length-1);
	
    }
    
    public static void main(String args[])
    {
        
        int [10] a = new int[] {2,5,6,7,8,9,3,2,1,6,12};
        QSortAlgorithm obj = new QSortAlgorithm();
        
        
        try{
        obj.sort(a);
        }catch(Exception e)
        {
             
            System.err.println(e.getMessage());
        }
        for(int i=0; i<=10; i++)
        {
           
            System.out.println( a[i]+ " ");
        }
    }
}
