Fila Circular com Prioridade - Ordenar a cada Inserção

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();
        }