Untitled
unknown
plain_text
4 years ago
981 B
8
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...