Estou sem consegui ver onde não está ordenando, se alguém puder da um help ai:
A cada inserção, verifico e ordeno decrescente.
Vou usar com inteiros, então a prioridade será do maior para o menor.
segue o codigo:
public class FilaPrioridadeVetor<T extends Comparable<T>> implements IFila<T>{
T[] vetor;
int inicio = 0;
int fim = -1;
int qntElementos, indice = 0;
//Metodo construtor;
public FilaPrioridadeVetor(Class<T> c, int tam) {
vetor = (T[]) Array.newInstance(c, tam);
}
/**
* Insere um elemento na ultima posição da fila;
*
* @param objeto
*/
@Override
public void Enfileirar(T objeto) {
if (vetor.length == qntElementos) {
System.out.println("Fila Cheia");
} else {
fim = (fim + 1) % vetor.length - 1;
vetor[fim + 1] = objeto;
qntElementos++;
fim++;
Ordena();
}
}
public void Ordena(){
int j, min;
T temp;
int indI = 0;
int indJ = 0;
for(int i = inicio; i < qntElementos-1; i++){
min = indI;
for(j = i + 1; j < qntElementos; j++){
indJ = i;
if(vetor[indJ].compareTo(vetor[min]) == -1){
min = indJ;
}
indJ = (indJ+1) %vetor.length;
}
temp = vetor[indI];
vetor[indI] = vetor[min];
vetor[min] = temp;
indI = (indI+1) %vetor.length;
}
}
/**
* Retorna e tira o primeiro elemento da fila;
*
* @return Objeto
* @throws FilaVaziaException
*/
@Override
public T Remover() throws FilaVaziaException {
if (filaVazia()) {
throw new FilaVaziaException();
} else {
T pega = vetor[inicio];
vetor[inicio] = null;
inicio++;
qntElementos--;
return pega;
}
}
/**
* Retorna o primeiro elemento da fila
*
* @return Objeto
*/
@Override
public T getInicio() {
return vetor[inicio];
}
/**
* Retorna o ultimo elemento da fila.
*
* @return Objeto
*/
@Override
public T getFim() {
return vetor[fim];
}
/**
* Apaga todos os elementos da fila;
*/
@Override
public void limpar() {
for (int i = 0; i < qntElementos; i++) {
if (vetor[i] != null) {
vetor[i] = null;
qntElementos--;
}
}
}
/**
* Verifica se conter o objeto n fila;
*
* @param objeto
* @return True ou False
*/
@Override
public boolean contem(T objeto) {
for (int i = 0; i < qntElementos; i++) {
if (vetor[i] == objeto) {
return true;
}
}
return false;
}
public boolean filaVazia() {
return qntElementos == 0;
}
/**
* Imprime todos os elementos da fila;
*
* @return String
*/
@Override
public String toString() {
if (filaVazia()) {
return "[Fila Vazia]";
}
int midI =0;
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = inicio; i < fim; i++) {
midI =i;
if (vetor[i] != null) {
sb.append(vetor[i]);
sb.append(", ");
}
midI = (midI+1)%vetor.length;
}
sb.append(this.vetor[this.qntElementos-1]);
sb.append("]");
return sb.toString();
}