public static int partition(int[] a, int low, int high)
	{
		int i = low;
		int j = high + 1;
		int point = a[low];
		while(true)
		{
			while( less(a[++i], point) )
			{
				if(i == high)
					break;
			}
			
			while( less(point, a[--j]) )
			{
				if(j == low)
					break;
			}
			
			if(i >= j)
				break;
			
			exchange(a, i, j);			
		}
		
		exchange(a, low , j);
		return j;
	}