INTERNA
PROF. MARCOS PAULO DOS SANTOS SILVA
DEFINIÇÃO
• Métodos simples:
• Adequados para pequenos arquivos.
• Requerem O(n2) comparações.
• Produzem programas pequenos.
• Insertion sort, – Inserção
• Selection sort, Seleção
• Bubble sort, Bolha
• Comb sort,
CLASSIFICAÇÃO DOS MÉTODOS DE ORDENAÇÃO
INTERNA
• Métodos eficientes: ou sofisticados
• Merge sort, Heapsort, Shell sort, Radix sort, Gnome sort, Counting sort, Bucket sort,
Cocktail sort, Timsort, Quick sort
MÉTODOS SIMPLES
(Imagens: Wikipedia.org)
SELECTION SORT - SELEÇÃO
(Imagens: reddit.com)
BUBBLE SORT - BOLHA
6 aux = v[i];
7 v[i] = v[i+1];
8 v[i+1] = aux;
9}
10 }
11 }
12 }
MARGE SORT
• Criado em 1945 pelo matemático americano John Von Neumann o Mergesort é um exemplo de algoritmo de
ordenação que faz uso da estratégia “dividir para conquistar” para resolver problemas. É um método estável
e possui complexidade C(n) = O(n log n) para todos os casos.
• Esse algoritmo divide o problema em pedaços menores, resolve cada pedaço e depois junta (merge) os
resultados. O vetor será dividido em duas partes iguais, que serão cada uma divididas em duas partes, e
assim até ficar um ou dois elementos cuja ordenação é trivial.
• Para juntar as partes ordenadas os dois elementos de cada parte são separados e o menor deles é
selecionado e retirado de sua parte. Em seguida os menores entre os restantes são comparados e assim se
prossegue até juntar as partes.
void mergeSort(int *vetor, int posicaoInicio, int if (i == metadeTamanho + 1 ) { else {
posicaoFim) {
vetorTemp[k] = vetor[j]; vetorTemp[k] = vetor[j];
int i, j, k, metadeTamanho, *vetorTemp;
j++; j++;
if(posicaoInicio == posicaoFim) return;
k++; k++;
metadeTamanho = (posicaoInicio + posicaoFim
) / 2; } }
else { }
• Criado por Donald Shell em 1959, o método Shell Sort é uma extensão do
algoritmo de ordenação por inserção. Ele permite a troca de registros
distantes um do outro, diferente do algoritmo de ordenação por inserção que
possui a troca de itens adjacentes para determinar o ponto de inserção. A
complexidade do algoritmo é desconhecida, ninguém ainda foi capaz de
encontrar uma fórmula fechada para sua função de complexidade e o
método não é estável.
SHELL SORT
• Os itens separados de h posições (itens distantes) são ordenados: o elemento na posição x é comparado e
trocado (caso satisfaça a condição de ordenação) com o elemento na posição x-h. Este processo repete até
h=1, quando esta condição é satisfeita o algoritmo é equivalente ao método de inserção.
• A escolha do salto h pode ser qualquer sequência terminando com h=1. Um exemplo é a sequencia abaixo:
• h(s) = 1, para s = 1
• h(s) = 3h(s - 1) + 1, para s > 1
• A sequência corresponde a 1, 4, 13, 40, 121, …
• Knuth (1973) mostrou experimentalmente que esta sequencia é difícil de ser batida por mais de 20% em
eficiência.
SHELL SORT
• Funcionamento do algoritmo:
• Escolhe um elemento da lista chamado pivô.
• Reorganiza a lista de forma que os elementos menores que o pivô fiquem de
um lado, e os maiores fiquem de outro. Esta operação é chamada de
“particionamento”.
• Recursivamente ordena a sub-lista abaixo e acima do pivô.
ALGORITMO EM C
void quick(int vet[], int esq, int dir){ pivo++;
int pivo = esq, i,ch,j; }
for(i=esq+1;i<=dir;i++){ }
j = i; if(pivo-1 >= esq){
if(vet[j] < vet[pivo]){ quick(vet,esq,pivo-1);
ch = vet[j]; }
while(j > pivo){ if(pivo+1 <= dir){
vet[j] = vet[j-1]; quick(vet,pivo+1,dir);
j--; }
} }
vet[j] = ch;
CONCLUSÃO