Você está na página 1de 32

Tcnicas de Programao

Algoritmos de Ordenao
Bubble Sort
Straight Sort
Insertion Sort
Quick Sort
Quick Sort Hibrido
(c) Paulo Santos
3
Bubble Sort
Para i de 0 at lista.tamanho -1
Para j de 0 at lista.tamanho -1
Se o lista[i] < lista[j]
Trocar(lista[i], lista[j])
(c) Paulo Santos
4
Bubble Sort
(c) Paulo Santos
5
Bubble Sort
(c) Paulo Santos
6
Bubble Sort
(c) Paulo Santos
7
Bubble Sort
(c) Paulo Santos
8
Straight Sort
Para i de 0 at lista.tamanho -1
posicao = i
Para j de i+1 at lista.tamanho -1
Se o lista[j] < lista[posicao]
posicao = j
troca(lista[posicao], lista[i])
(c) Paulo Santos
9
Straight Sort
(c) Paulo Santos
10
Straight Sort
(c) Paulo Santos
11
Insertion Sort
Para i de 1 at lista.tamanho -1
aux = lista[i]
posicao = i
Enquanto (posicao >= 1 e aux < lista[posicao-1])
lista[posicao] = lista[posicao-1]
posicao = posicao-1
lista[posicao] = aux
(c) Paulo Santos
12
Insertion Sort
Quick Sort
Algoritmo
Dividir o vector em trs sub vectores
1 vector Um elemento pivot
2 vector todos os elementos que sejam maiores que o
pivot
3 vector- todos os elementos que sejam menores que o
pivot
Repetir o processo para o 2 e 3 vector
Quick Sort
int dados[ ]= {4, 6, 3, 2, 1, 8, 5}; //dados a ordenar
quickSort(lista, 0, length-1);
void quickSort(int dados[ ], int esquerda, int direita) {
Se direita > esquerda
pivot = particao(esquerda, direita)
quickSort(dados, esquerda, pivot-1)
quickSort(dados, pivot + 1, direita)
}
Quick Sort
int particao (int dados[], int esquerda, int direita) {
pivot = lista[direita]
pesq = esquerda
pdir = direita -1
acabou = falso
enquanto no acabou
enquanto lista[pesq] < pivot
pesq = pesq + 1
enquanto lista[pdir] > pivot
pdir = pdir - 1
se pesq > pdir
acabou = verdadeiro
se no
troca(lista, pesq, pdir)
pesq = pesq + 1
pdir = pdir 1
Se pesq > pdir
acabou = verdadeiro
troca (lista, pesq, direita)
devolve pesq
}
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
Quick Sort
QuickSort Hbrido
Utilizar o quickSort at uma determinada profundidade
Utilizar outro algortimo para ordenar os ltimos
elementos.
Vantagens
A rvore de recurso interrompida antes de chegar s folhas
As chamadas recursivas utilizam espao na stack do
computador e so lentas
Pesquisa Sequencial
int dados[ ] = {1, 4, 6, 3, 7, 8, 5};
int find(int dados[ ], int o, int tamanho) {
para i de 0 at tamanho-1
se dados[i] = o
devolve 1
devolve 0
}
Pesquisa Binria
Limitaes: O array tem que estar ordenado
int[] dados = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int find(int dados[ ], int o, int tamanho) {
esquerda = 0
direita = tamanho - 1
enquanto esquerda <= direita
meio = (esquerda+direita) / 2
se dados[meio] < o
esquerda = meio + 1
senao se dados[meio] > o
direita = meio - 1
senao
devolve 1
devolve 0
}