Professional Documents
Culture Documents
Shellsort
Estruturas de Dados
O(n1.3)
Profa. Flávia Linhalis Quicksort
O(n log n) – pior caso: O(n2)
Mergesort
Ordenação Interna – Métodos Avançados O(n log n)
Cota Inferior para ordenação
Shell Sort Ordenação com ABB
Quick Sort O(n log n)
Merge Sort
Ordenação com ABB
Heapsort
Heap Sort O(n log n)
12 33 48 57 25 92 86 37 h=1
12 25 33 48 57 92 86 37 h=1
12 25 33 48 57 86 92 37 h=1
12 25 33 37 48 57 86 92
Ordenar os dois subvetores [25, 33, 12] e pivo <- vet[(IniVet + FimVet) div 2];
faça
[48, 92, 86, 57]. enquanto (vet[i] < pivo) faça i <- i + 1;
enquanto (vet[j] > pivo) faça j <- j – 1;
se (i <= j) então
início
aux <- vet[i]; vet[i] <- vet[j]; vet[j] <- aux;
i <- i + 1; j <- j – 1;
fim
enquanto (i <= j)
se (j > IniVet) então QuickSort(vet, IniVet, j);
se (i < FimVet) então QuickSort(vet, i, FimVet);
fim
17 8
26 4
Dados originais:
12 8 17 4 26 • Todos os N elementos serão int N;
comparados deste a raiz para serem int *vet;
inseridos na árvore. Æ O(n) struct no{
12 • As comparações são reduzidas à n o {
i n t * v e t
int elem;
;
metade Æ O(log n)
i r ;
s q ;
n o * t r e e ;
8 17 struct no *dir;
• Este método é portanto O(n log n) no struct no *esq;
4 26
caso da árvore estar balanceada. };
struct no *tree;
Algoritmo para criar uma ABB Percurso em ordem
void createTree() {
criar a raiz (tree) com o primeiro elemento do vetor (vet[0])
criar um ponteiro auxiliar para percorrer a árvore (aux)
void emOrdem(no *tree) {
criar ponteiro auxiliar para armazenar o ponto de inserção (onde)
for (int i = 1; i < N; i++) {
struct no *aux = tree;
criar o novo nó if (tree != NULL) {
colocar vet[i] no novo nó emOrdem(aux->esq);
aux = tree; cout << tree->elem << " ";
while (aux != NULL) { emOrdem(aux->dir);
if (vet[i] >= aux->elem) { }
onde = &aux->dir; aux = aux->dir;
}
} else {
onde = &aux->esq; aux = aux->esq;
}
}
*onde = novo;
}
}
2 4 1
7 8 9
0 1 2 3 4 5 6 7 8 9 3 10 8 10 2 9
14 8
4 1 3 2 16 9 10 14 8 7
3 4 7 9 3 5 6 3
8 7 9 4 7 1
Chamar build_max_heap e obter:
0 1 2 3 4 5 6 7 8 9 2 4 1 2 1 2
16 14 10 8 7 9 3 2 4 1
...
Executar o laço N-1 vezes 0 1 2 3 4 5 6 7 8 9
1 2 3 4 7 8 9 10 14 16
Vetor ordenado!