Monticulos / Cola prioridad

Tram
12 de Marzo del 2006
hola, estoy implementando un monticulo de minimos y maximos. Me he atascado con el metodo donde extraigo, a ver si alguien puede echarme una mano porque no soy capaz de conseguir que estraiga, es decir, sacar la raiz, que es la primera posicion del vector de la cola de prioridad y luego que el resto de los elementos de ese vector queden bien colocados
Este es el codigo que tengo hasta ahora


public class Monticulo implements ColaPrioridad{

Comparable[] vector;
int numElementos;
boolean esDeMinimos;

public Monticulo(int tam, int maxmin) {
this.numElementos = 0;
vector = new Comparable[tam];
if(maxmin==0) esDeMinimos=true;
else esDeMinimos=false;
}

public void insertar(Comparable c){
// Si se ha alcanzado el tamaño maximo, se duplica
if ((vector.length-1) == numElementos) {
duplicarCola();
}
// Insertar en el ultimo elemento
this.vector[numElementos++] = c;
// Cribar hacia arriba:
// Mientras sea menor que mi padre, intercambiar
int posi = this.numElementos-1;

while (posi>0 && masPrioridad(vector[posi],vector[posiPadre(posi)])) {
// Intercambiar con padre
int posiPadre = posiPadre (posi);

Comparable temp = vector[posi];
vector[posi] = vector[posiPadre];
vector[posiPadre] = temp;
posi = posiPadre;
}
}

private boolean masPrioridad (Comparable a, Comparable b) {
if (this.esDeMinimos) {
return a.compareTo(b) < 0;
}
else {
return a.compareTo(b) > 0;
}
}

private int posiPadre (int posi) {
return (posi-1)/2;
}