Algoritimo Online para cálculo da Mediana de um conjunto de inteiros não repetidos
Por: Carlos Henrique Teles • 18/7/2019 • Trabalho acadêmico • 731 Palavras (3 Páginas) • 185 Visualizações
// Algoritimo Online para cálculo da Mediana de um conjunto de inteiros não repetidos.
int CalcMed (int e, int &m, Heap &E, Heap &D)
{
// Os Heaps estão Balanceados? Se Sim Difcont será 0
int Difcont = CalculaDifcont (ContHeap.E(), ContHeap.D());
{
caso 1: // Existem mais elementos Heap_Max Esquerdo
Se ( e < m ) // O elemento corrente será colocado no Heap_Max Esquerdo
{
// Remove o elemento do topo do Heap Esquerdo
// Insere o elemento no Heap Direito
Insere.D (ExtrairTop.E());
// Insere o elemento corrente no Heap_Max Esquerdo
Insere.E(e);
}
Senão
{
// Insere o elemento corrente no Heap_Min Direito
Insere.D (e);
}
// Os dois Heaps estão balanceados
m = Média (ConsultaTop.E(), ConsultaTop.R());
Sair da rotina;
caso 0: // Os Heaps, esquerdo e direito, tem a mesma quantidade de elementos
Se ( e < m ) // O elemento corrente será colocado no Heap_Max Esquerdo
{
Insere.E (e);
m = ConsultaTop.E ();
}
Senão
{
// O elemento corrente será colocado no Heap_Min Direito
Insere.D(e);
m = ConsultaTop.D();
}
Sair da rotina;
caso -1: // Existem mais elementos no Heap_Min Direito
Se ( e < m ) // O elemento corrente será colocado no Heap_Max Esquerdo
{
Insere.E (e);
}
Senão
{
// Remove o elemento do topo do Heap Direito
// Insere o elemento no Heap Esquerdo
Insere.E (ExtrairTop.R());
// Insere o elemento corrente no Heap_Min Direito
Insere.R (e);
}
// Os dois Heaps estão balanceados
m = Média(ConsultaTop.E(), ConsultaTop.R());
Sair da rotina;
}
// Não é necessário mais retorna, m já está atualizada
Imprime m;
}
...