private static int partition(Comparable[] a, int lo, int hi) {
		// ɨָ
		int i = lo, j = hi + 1;
		// Ĭϰa[lo]ΪзԪ
		Comparable v = a[lo];

		while (true) {
			// ˿ʼɨ裬ֱҵһڵԪ
			while (less(a[++i], v)) {
				if (i == hi) {
					break;
				}
			}

			// ڴҶ˿ʼɨ裬ֱҸһСڵԪ
			while (less(v, a[--j])) {
				if (j == lo) {
					break;
				}
			}

			// ָʱ˳ѭ
			if (i >= j) {
				break;
			}

			// ԪصλȻԣλ
			exch(a, i, j);
		}

		// зԪa[lo]Ҳa[j]Ȼ󷵻j
		exch(a, lo, j);
		return j;
	}