Untitled

 avatar
unknown
plain_text
4 years ago
981 B
5
Indexable
public class HeapEx {
	public int[] pQueue;
	public static int rear = 1;

	public static final int MAX_VALUE = 1000000000;

	public void swap(int x, int y) {
		int tmp = pQueue[x];
		pQueue[x] = pQueue[y];
		pQueue[y] = tmp;
	}

	void push(int Queue[], int value) {
		Queue[rear++] = value;
		int i = rear - 1;
		while (i > 1 && Queue[i] > Queue[i >> 1]) {
			swap(i, i >> 1);
			i = i >> 1;
		}
	}

	public int pop(int Queue[]) {
		if (rear < 1) {
			return 0;
		}
		int value = Queue[1];
		Queue[1] = Queue[--rear];
		Queue[rear] = 0;
		int i = 1;
		int max = MAX_VALUE;
		while (i << 1 < rear && (Queue[i] < Queue[i << 1] || Queue[i] < Queue[(i << 1) + 1])) {
			max = Queue[i << 1] > Queue[(i << 1) + 1] ? Queue[i << 1] : Queue[(i << 1) + 1];
			if (max == Queue[i << 1]) {
				swap(i, i << 1);
				i = i << 1;
			} else if (max == Queue[(i << 1) + 1]) {
				swap(i, ((i << 1) + 1));
				i = (i << 1) + 1;
			}
		}
		return value;
	}
}
Editor is loading...