private static int partition(int[] a, int lo, int hi) {
		int i = lo;
		int j = hi;
		while(true) {
			while(a[++i] < a[lo]) {
				if(i == hi)
					break;
			}
			
			while(a[lo] < a[--j]) {
				if(j == lo)
					break;
			}
			
			if(i >= j)
				break;
			
			exch(a, i, j);
		}
		
		exch(a, lo, j); // Puts the low thing in the middle I guess
		return j;
	}