private static void quick_sort(Comparable[] a, int left, int right) {
		if(left >= right ) return ;
		
		int N = right - left + 1 ; 
		Random  random = new Random();
		int p = random.nextInt(N) + left ;
		
		Comparable temp = a[p] ;
		
		exch(a,right,p);
		int i = left ,
			j = right ;
		    
		while(i < j ){
			while(less(temp,a[j]) && i < j) j-- ;
			if(i < j ) a[i++] = a[j]; 
			
			while(less(a[i],temp) && i < j) i++;
			
			if(i < j )a[j--] = a[i];
		}
		
		a[i] = temp ; 
		
		quick_sort(a,left,i-1);
		quick_sort(a,i+1,right);
	}