Moderadores: andre_luis, 51, guest2003, Renie
KrafT escreveu:Talvez essa jóia do antigo fórum te ajude:
http://www.asm51.eng.br/forum/topic.asp?TOPIC_ID=805
PS: Não liga para o meu stress com o Prof Francisco... Isso já tá resolvido a muito tempo...
Rogerio Brasiliense escreveu:Envei para teu email.
Não entendo de PIC, mas acho que usar funcao recursiva vai estourar a pilha.
chipselect escreveu:Faça um algoritmo iterativo de ordenação por árvore (heap sort), com a unificação dos "arquivos" de saída.
Na universidade eu propus uma variação do heap sort em que não era necessário formar dois arquivos de saída, adicionando-se umas poucas variáveis de controle de índice para guardar a posição dos registros das subárvores.
Um grupo de colegas fizeram o algoritmo, funcionou. Infelizmente não tenho o código.
Detalhe.: o Quicksort é mais fácil de ser implementado que o Heap Sort, mas o Heap Sort, no pior, melhor e no caso médio é de ordem nLogn enquanto que o Quick Sort no pior caso é exponencial, igual à ordenação bolha... apesar de no caso médio ser de ordem logarítmica como o Heap Sort.
Logo, na média, o QuickSort em a mesma velocidade que o Heap Sort, mas considerando até os casos raros, o Heap Sort é melhor.
O Heap Sort não é tão difundido quanto o QuickSort pq ele é chato pacas pra ser implementado e os algoritmos necessitavam de 2 stream de saída.
heapsort(tipo a[], int n)
{
int i = n/2, pai, filho;
tipo t;
for (;;)
{
if (i > 0)
{
i--;
t = a[i];
}
else
{
n--;
if (n == 0)
return;
t = a[n];
a[n] = a[0];
}
pai = i;
filho = i*2 + 1;
while (filho < n)
{
if ((filho + 1 < n) && (a[filho + 1] > a[filho]))
filho++;
if (a[filho] > t)
{
a[pai] = a[filho];
pai = filho;
filho = pai*2 + 1;
}
else
break;
}
a[pai] = t;
}
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante