Академический Документы
Профессиональный Документы
Культура Документы
Algoritmos de Ordenao
num1 = 100;
num2 = 200;
if (num1 > num2) maior = num1; else maior = num2;
printf(Maior: %d\nMenor: %d\n, maior, menor);
Introduo
E se forem trs nmeros para ordenar???
J no to simples!
A quantidade de comparaes aumenta...
Trecho de cdigo em C:
num1 = 100;
num2 = 200;
num3 = 150;
if (num1 >= num2 && num1 >= num3) {maior1 = num1;
if (num2 > num3)
{maior2 = num2; maior3 = num3;} else
{maior2 = num3; maior3 = num2;}}
...
Introduo
Continuando o raciocnio para vrios nmeros,
no vivel testar um contra os outros desta
forma!
Portanto, precisamos de algoritmos que, dados
vrios valores que admitem ordem em uma
estrutura linear (como um vetor), ordene-os o
mais rpido possvel.
Como ordenar a lista de nmeros: 200, 324,
123, 12, 1, 4, 6, 789, 34, 2345, 324, 100?
Ordenao por Insero
Insertion Sort
Jogadores de baralho sabem ordenar as cartas
ao receb-las:
a primeira carta est ordenada;
com todas as outras:
procure do fim para o incio uma carta maior do que a
recebida;
inserir O(1)
26 29 2 13 17 2 26 13 17 29
29 > 2 Troca! 26 > 13 Troca!
26 2 29 13 17 2 13 26 17 29
29 > 13 Troca! 26 > 17 Troca!
26 2 13 29 17
29 > 17 Troca! Continua...
Ordenao por Bolha
Bubble Sort
Passo 3 (at 2): Passo 4 (at 1):
2 13 17 26 29 2 13 17 26 29
2 < 13 No troca! 2 < 13 No troca!
2 13 17 26 29
13 < 17 No troca!
Fim Vetor Ordenado
2 13 17 26 29
Ordenao por Bolha
Bubble Sort
Cdigo em C:
void bubbleSort (int *primeiro, int *ultimo)
{
bool naoTrocou;
int *posAtual;
for (; ultimo > primeiro; --ultimo)
{
naoTrocou = true;
for (posAtual = primeiro; posAtual < ultimo; ++posAtual)
{
if (*posAtual > *(posAtual+1))
{
troca (posAtual, posAtual+1);
naoTrocou = false;
}
}
if (naoTrocou) return;
}
}
Ordenao por Mistura
Merge Sort
O algoritmo de ordenao por mistura pertence
a classe dividir e conquistar.
Ele um algoritmo recursivo composto por trs
partes:
DIVIDIR: dividir a lista em duas partes;
12 33 11 2 25 54 10 4 DIVIDIR
12 33 11 2 25 54 10 4
12 33 2 11 25 54 4 10 ORDENAR
Continua...
Ordenao por Mistura
Merge Sort
Exemplo:
12 33 2 11 25 54 4 10
2 11 12 33 4 10 25 54 COMBINAR
2 4 10 11 12 25 33 54
Vetor
Ordenado
Ordenao por Mistura
Merge Sort
Cdigo em C:
void mergeSort(int vetor[], int tamanho) {
int meio;
if (tamanho > 1) {
meio = tamanho / 2;
mergeSort(vetor, meio);
mergeSort(vetor + meio, tamanho - meio);
merge(vetor, tamanho);
}
}
piv piv
piv
Ordenao Rpida
Quick Sort
O algoritmo recursivo, simples e intuitivo:
Incio Fim
Ordenao Rpida
Quick Sort
Esquerda Direita
Esquerda Direita
Esquerda Direita
Esquerda Direita
Incio Fim
Piv = 23
Ordenao Rpida
Quick Sort
Esquerda passou da direita.
Fim do lao.
Direita Esquerda
Direita Esquerda
Direita
Piv = 23
Direita