Sunteți pe pagina 1din 11

U NIVERSIDADE F EDERAL DO PAMPA

C AMPUS B AG

N OTAS DE A ULA - P ESQUISA E C LASSIFICAO DE D ADOS

C RISTIAN C ECHINEL
contato@cristiancechinel.pro.br

B AG , A BRIL DE 2008, VERSO 1.0

Sumrio
1 Merge Sort 1.1 Funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . QuickSort 2.1 Funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 7 7 7

HeapSort 9 3.1 Funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Lista de Algoritmos
1 2 3 4 5 6 7 mergeSort (vet, inicio, m) . . . . merge (vet, inicio, meio, m) . . . quickSort (vet, inicio, m) . . . . partition (vet, inicio, m): inteiro maxHeapfy (vet, i, tamHeap) . . buildMaxHeap(vet, tamHeap) . . heapsort(vet, tam) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 . 5 . 8 . 8 . 10 . 11 . 11

Captulo 1 Merge Sort


1.1 Funcionamento

O algoritmo Merge Sort, tambm conhecido como ordenao por fuso ou por intercalao, utiliza como estratgia a diviso do vetor a ser ordenado em duas partes. Essa diviso acontece recursivamente at que no seja mais possvel qualquer diviso dos vetores resultantes, ou seja, at o momento em que os vetores resultantes da diviso tenham tamanho igual a 1. Aps subdividir recursivamente o vetor inicial em n partes, o algoritmo faz uma intercalao entre os elementos desses vetores at nalizar a pilha de processos recursivos.

1.2

Algoritmo

O algoritmo Merge Sort possui complexidade O(nlogn) e formado por dois procedimentos, um primeiro responsvel por realizar a diviso do vetor, e outro responsvel pela intercalao em ordem dos vetores. Algoritmo 1 mergeSort (vet, inicio, m) se (inicio < m) ento var meio: inteiro meio (inicio + f im)div2 mergeSort(vet, inicio, meio) mergeSort(vet, meio+1, m) merge(vet, inicio, meio, m) m-se A intercalao entre os vetores implementada no algoritmo 2. 4

CAPTULO 1. MERGE SORT

Algoritmo 2 merge (vet, inicio, meio, m) var tamV etInicio, tamV etF inal, i, j, k: inteiro var vetInicio[tamV etInicio], vetF inal[tamV etF inal]: inteiro {criao dos vetores auxiliares para realizar a intercalao} para i de 0 ate tamV etInicio passo 1 faa vetInicio[i] vet[inicio + i] m-para para j de 0 ate tamV etF inal passo 1 faa vetF inal[j] vet[meio + 1 + j] m-para ij0 k inicio enquanto (i < tamvetinicio) && (j < tamvetf inal) faa se (vetinicio[i] < vetf inal[j]) ento vet[k + +] vetInicio[i + +]

seno

m-se m-enquanto enquanto (i < tamvetinicio) faa m-enquanto enquanto (j < tamvetf inal) faa m-enquanto

vet[k + +] vetF inal[j + +]

vet[k + +] vetInicio[i + +]

vet[k + +] vetF inal[j + +]

CAPTULO 1. MERGE SORT

O procedimento recebe os ndices de inicio, meio e m do vetor, e utiliza os mesmos para gerar dois vetores auxiliares chamdos de vetInicio e vetF inal. Esses vetores so ento preenchidos com os elementos do vetor que ser intercalado e o algorimo inicia uma comparao entre os valores de cada um dos vetores. A cada comparao, o menor valor armazenado no vetor de resultado e o contador do vetor auxiliar que continha o elemento incrementado, dando incio a uma nova comparao. Por ltimo, o algoritmo avalia qual o vetor auxiliar cujos elementos ainda no foram inseridos no vetor resultado e faz a insero dos mesmos.

Captulo 2 QuickSort
2.1 Funcionamento

O algoritmo QuickSort, ou de Ordenamento Rpido, uma estratgia recursiva para a ordenao dos dados. Ele se utiliza basicamente de 2 passos para realizar essa ordenao: Dividir o vetor inicial em 2 partes, com base em um elemento denominado de piv, sendo que todos os elementos da primeira parte devero ser menores que o piv e todos os elementos da segunda parte devero ser maiores que o mesmo. O piv ento posicionado no meio dos dois vetores, ou seja, colocado em sua posio nal. Os dois vetores particionados na etapa anterior so novamente particionados recursivamente e consequentemente ordenados.

2.2

Algoritmo

O algoritmo quickSort dividido em dois procedimentos, um responsvel por criar as parties e outro que ir chamar o procedimento de particionamento recursivamente.

CAPTULO 2. QUICKSORT

Algoritmo 3 quickSort (vet, inicio, m) se (inicio < m) ento var posicao: inteiro posicao partition(vet, inicio, f im) quickSort(vet, inicio, posicao) quickSort(vet, posicao + 1, m) m-se

Algoritmo 4 partition (vet, inicio, m): inteiro var pivo, i, j : inteiro pivo vet[f im] i inicio 1 para j de inicio ate f im 1 passo 1 faa se (vet[j] < pivo) ento ii+1 troca vet[j] com vet[i] m-se m-para troca vet[f im] com vet[i + 1] retorna i + 1;

Captulo 3 HeapSort
3.1 Funcionamento

Um heap binrio um vetor que pode ser encarado como uma rvore binria quase completa, ou seja, preenchida em todos os nveis, as vezes com excesso do nvel mais baixo. Para o clculo dos ndices dos nodos da rvore a partir de uma estrutura de vetor, podemos utilizar a seguinte idia: pai(i) = (i - 1)/2 esquerda(i) = i * 2 + 1 direita(i) = i * 2 + 2 O algoritmo heapsort utiliza-se da construo de heaps mximos, ou seja, todo n lho menor ou igual ao seu n pai. Aps transformar um vetor qualquer em um heap mximo, o algoritmo retira o elemento do topo do heap (o maior de todos) e troca o mesmo com o ltimo elemento do heap. A cada troca, o algoritmo transforma novamente o heap em um heap mximo e repete o processamento, at o momento de ter retirado do topo do heap o ltimo elemento. A estratgia de ordenamento por heaps apresenta uma ordem de complexidade O(nlgn) e pode ser dividida em 3 rotinas principais: maxHeapfy (vet, i, tamHeap): essa rotina responsvel por avaliar se um trecho do heap (marcado pela posio i) respeita a propriedade de Heap Mximo, ou seja, se os lhos de i so realmente menores que o elemento da posio i. A rotina assume que todas as rvores binrias com razes na esquerda(i) e na direita(i) 9

CAPTULO 3. HEAPSORT

10

respeitam essa condio, e que somente o trecho atual pode estar violando a mesma. Caso seja encontrada uma violao da condio naquele trecho do heap, a rotina faz a troca do elemento raiz com o maior elemento, e chama a si mesma novamente para uma reestruturao do heap a partir da posio que foi trocada. Veja o algoritmo 5. build-Max-Heap(vet, tamHeap): realiza a construo heap mximo utilizando a rotina MaxHeapfy. Em um lao que inicia a partir do primeiro nodo (de baixo para cima) que possui lhos e que termina no primeiro nodo realizada a chamada da rotina MaxHeapfy. Para localizar o primeiro nodo (de baixo para cima) basta realizar a diviso do tamanho do heap por 2.e diminuir 1, como mostra o algoritmo 6. heapSort(vet, tam): o ltimo passo a utilizao do heap mximo construindo para a ordenao propriamente dita do vetor. Considerando que o elemento do topo de um heap mximo o maior elemento do conjunto, essa rotina ir trocar o elemento do topo com o ltimo elemento do vetor, deixando o ltimo elemento ordenado. Aps a troca, com a alterao da propriedade de heap mximo, a rotina chama novamente a rotina MaxHeapfy. A iterao inicia a partir do ltimo elemento e termina quando realiza a troca do segundo elemento do vetor. Veja o algoritmo 7.

3.2

Algoritmo

Algoritmo 5 maxHeapfy (vet, i, tamHeap) esquerda i 2 + 1 direita i 2 + 2 se (vet[esquerda] > vet[i]) and (esquerda <= tamHeap) ento maior esquerda m-se se (vet[direita] > vet[maior]) and (direita <= tamHeap) ento maior direita m-se se (i <> maior) ento troca(vet[maior], vet[i]); maxHeapfy(vet, maior, tamHeap) m-se

CAPTULO 3. HEAPSORT

11

Algoritmo 6 buildMaxHeap(vet, tamHeap) para i de tamHeap div 2 1 ate 0 passo -1 maxHeapfy(vet, i, tamHeap) m-para

faa

Algoritmo 7 heapsort(vet, tam) tamHeap tam buildMaxHeap(vet, tamHeap) para i de tam 1 ate 1 passo -1 faa troca(vet[i], vet[0]); tamHeap tamHeap 1 maxHeapfy(vet, i, tamHeap) m-para

S-ar putea să vă placă și