public static void siftdown(int[] data, int low, int high) {
		int parent = low, child = 0;
		while (parent <= high) {
			child = (parent << 1) + 1;
			if (child > high) {
				break;
			}
			if (child < high && data[child + 1] > data[child]) {
				child += 1;
			}
			if (data[child] > data[parent]) {
				swap(data, parent, child);
				parent = child;
			} else {
				break;
			}
		}
	}