El propósito del programa es crear un Simulador de Vida Marina (a grandes rasgos).
Mi problema es el siguiente:
Tengo una clase abstracta llamada AnimalMarino que define unos cuantos metodos, entre ellos este:
public abstract int getVelocidad();
Este método devuelve un entero. Hasta aqui todo bien. Después de varias cosas más, debo implementar la alimentación, donde el estamento superior de la piramide come del inmediatamente inferior, y come al mas lento. Mi idea entonces, ha sido ordenar el vector de los animales afectados segun la velocidad para asi seleccionar cuales seran los que menos suerte tengan y sean devorados. Para ordenar el vector, he pensado en usar quicksort:
/**
* quicksort (Vector<AnimalMarino>).
* Metodo que ordena un vector de Animales Marinos segun su velocidad
* @param v Vector a ordenar
*/
private void quicksort(Vector<AnimalMarino> v) {
this.partition(v, 0, v.size()-1);
}
Procesamiento de la partición:
/**
* partition (Vector<AnimalMarino>,int,int).
* Funcion auxiliar que ordena una particion de quicksort.
* @param v Vector a ordenar
* @param izq Indice izquierdo
* @param der Indice derecho
*/
private void partition(Vector<AnimalMarino> v, int izq, int der) {
int i, j;
int piv; ///< Pivote. Será la velocidad sobre la que pivotará
AnimalMarino aux;
piv = v.elementAt((izq+der)/2).getVelocidad();
i = izq;
j = der;
while (i <= j){
while(v.elementAt(i).getVelocidad() < piv)
i++;
while(v.elementAt(j).getVelocidad() > piv)
j--;
if(i < j){
aux = v.elementAt(i);
v.removeElementAt(i);
v.add(i, v.elementAt(j));
v.remove(j);
v.add(j, v.elementAt(i));
i++;
j--;
} else{
if (i == j){
i++;
j--;
}
}
}
if (izq < j)
this.partition(v, izq, j);
else if (i < der)
this.partition(v, i, der);
}
Mi pregunta es: este vector que le estoy pasando, ¿se modificará al final del todo, o se quedará igual? ¿Voy a necesitar pedir que se devuelva el vector ordenado o no es necesario? Gracias de antemano.