Você está na página 1de 31

Pesquisa e Ordenao

Sistemas de Informao
Domingos Bernardo Gomes Santos

Domingos Bernardo Gomes Santos

PESQUISA E ORDENAO SISTEMAS DE INFORMAES


Educao a Distncia

SUMRIO
1. 2. 3. 4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 4. 4.1. INTRODUO ........................................................................................................ 5 VETORES ................................................................................................................ 6 ALGORITMOS DE PESQUISA E ORDENAO ................................................ 7 ALGORITMO POR INSERO DIRETA ......................................................... 7 ALGORITMO POR SELEO DIRETA ........................................................... 9 ALGORITMO BUBBLESORT ......................................................................... 10 ALGORITMO MERGESORT ........................................................................... 13 ALGORITMO HEAPSORT .............................................................................. 16 ALGORITMO QUICKSORT ............................................................................ 21 ALGORITMO SHELLSORT ............................................................................ 23 ALGORITMO RADIXSORT ............................................................................ 25 A EFICINCIA DE ALGORITMOS .................................................................... 27 MEDIDAS .......................................................................................................... 27 REFERNCIAS .................................................................................................... 30

NDICE DE FIGURAS
FIGURA 1 VETOR OU ARRAY UNIDIMENSIONAL E MATRIZ MULTIDIMENSIONAL ................. 6 FIGURA 2 ORDENAO POR INSERO DIRETA .................................................................. 8 FIGURA 3 ORDENAO POR SELEO DIRETA ................................................................... 9 FIGURA 4 VETOR DESORDENADO COM A PALAVRA ORDENA ...................................... 10 FIGURA 5 ORDENAO POR MTODO BUBBLESORT ......................................................... 11 FIGURA 6 DIVISO DO VETOR PELO MTODO MERGESORT .............................................. 13 FIGURA 7 COMPARAO ENTRE VETORES DE TAMANHO N = 1 ..................................... 14 FIGURA 8 COMPARAO ENTRE VETORES DE TAMANHO N = 2 ..................................... 15 FIGURA 9 COMPARAO ENTRE VETORES DE TAMANHO N = 4 ..................................... 16 FIGURA 10 VETOR E HEAP BINRIO................................................................................ 16 FIGURA 11 DISTRIBUIO DE VALORES NO HEAP BINRIO .............................................. 17 FIGURA 12 ORGANIZANDO VALORES NO HEAP BINRIO ................................................... 17 FIGURA 13 ORGANIZANDO VALORES NO HEAP BINRIO ................................................... 18 FIGURA 14 PRIMEIRO E SEGUNDO PASSOS DE ORDENAO NO HEAP BINRIO.................. 19 FIGURA 15 TERCEIRO E QUARTO PASSOS DE ORDENAO NO HEAP BINRIO .................... 20 FIGURA 16 QUINTO E SEXTO PASSOS DE ORDENAO NO HEAP BINRIO .......................... 20 FIGURA 17 VETOR COM VALORES DESORDENADOS E O PIV ............................................ 21 FIGURA 18 APLICANDO MTODO QUICKSORT COM UM PIV E DOIS VETORES .................. 21 FIGURA 19 APLICANDO MTODO QUICKSORT COM DOIS PIVS E QUATRO VETORES ......... 22 FIGURA 20 APLICANDO MTODO QUICKSORT COM QUATRO PIVS E OITO VETORES ......... 23 FIGURA 21 VETOR COM VALORES DESORDENADOS E NUMERO DE INCREMENTO................ 23 FIGURA 21 PRIMEIRO CICLO DE INTERAES NO MTODO SHELLSORT ............................ 24 FIGURA 22 SEGUNDO CICLO DE INTERAES NO MTODO SHELLSORT ............................ 24 FIGURA 23 TERCEIRO CICLO DE INTERAES NO MTODO SHELLSORT ............................ 25 FIGURA 24 VETOR COM VALORES DESORDENADOS NO MTODO RADIXSORT ..................... 25 FIGURA 25 PRIMEIRO CICLO DE INTERAES DO MTODO RADIXSORT ............................ 26

NDICE DE TABELAS
TABELA 1 ORDENS DE COMPLEXIDADES DE ALGORITMOS ................................................... 28 TABELA 2 MDIO, MELHOR E PIOR CASOS DOS ALGORITMOS DE ORDENAO .............. 29

1. INTRODUO
A pesquisa e a ordenao aparecem como tema de constante discusso e como foco de estudo de diversos pesquisadores. Atualmente a discusso est concentrada na necessidade encontrada por sites de busca na internet, em conseguir realizar buscas precisas e eficientes por informaes. Ocorre ainda uma corrida tecnolgica entre os sites de busca por conseguir o melhor algoritmo de pesquisa, e com isso tornar-se referncia, quando a necessidade na internet visa a busca pela informao. Nesse contexto podem-se observar diversas literaturas ao longo do tempo, com publicaes sobre conceitos, definies e a necessidade em empregar mtodos para a pesquisa e a ordenao de dados: No volume 3 da clebre srie A arte de programar computadores escrita por (Knuth, 1973), onde ele diz acredito que quase todo aspecto importante da programao ocorra como uma faceta de ordenao ou pesquisa. Colocar um conjunto de dados em ordem (crescente ou decrescente) uma operao constantemente exigida, pois facilita muitas outras operaes subseqentes, tais como a pesquisa por um dado especfico (Swait, 2002). Em geral, entende-se a atividade de ordenao como sendo o processo de rearranjo de um certo conjunto de objetos de acordo com um critrio (ordem) especfico. O objetivo da ordenao facilitar a localizao dos membros de um conjunto de dados. Assim sendo, uma atividade fundamental e universalmente utilizada para a elaborao de algoritmos mais complexos. Exemplos de casos em que os objetos so ordenados podem ser encontrados em listas telefnicas, impostos de renda, ndices, bibliotecas, dicionrios, almoxarifados, etc... (Wirth, 1999). Outro aspecto de relevncia que deve ser considerando na busca da informao de forma precisa, credita-se s bases de dados, no sendo apenas consideradas com repositrio de dados. Um repositrio de dados apenas armazena informaes sem mecanismos de busca e procura por informaes. Para acrescentar ordem aos bancos de dados, foram criados diversos algoritmos de pesquisa e ordenao. Os algoritmos de pesquisa ou ordenao nos permitem que encontremos um determinado dado no meio de um milho de dados. Entre os mais importantes podemos citar BubbleSort com a ordenao por flutuao, HeapSort com a ordenao por heap, InsertionSort com a ordenao por insero e o QuickSort com um mtodo de ordenao rpido. Na rea gerencial ou de tomada de decises em grandes organizaes, os bancos de dados exercem diversas funes. Atravs de algoritmos de ordenao empregados para ordenar os dados, pode-se ter respostas s perguntas do tipo, "quais os produtos mais vendidos esse ano?" ou "quais so os funcionrios que tem maior salrio?". Um algoritmo constitui-se de um conjunto de procedimentos realizados em uma determinada ordem que coloque em ordem um conjunto de dados em diversas situaes.

Mas, por mais rpidos que sejam os computadores de hoje, o processo de pesquisa e ordenao costuma ser bastante demorado. Para isso, os mtodos de pesquisa e ordenao demonstram formas de aperfeioar esses processos, fazendo o maior nmero de operaes com um mnimo de esforo possvel do microprocessador. Em carter didtico, para facilitar o estudo e o entendimento dos algoritmos de pesquisa e ordenao na apostila, as informaes sero colocadas em vetores e em seguida ordenadas atravs de algoritmos. Para organizar ou pesquisar por uma informao, necessrio que esta informao esteja armazenada em algum lugar. Um vetor pode ser considerado um lugar ou local para armazenamento de um conjunto de informaes.

2. VETORES
Os vetores so, provavelmente, as estruturas de dados mais conhecidas; e talvez mesmo, a nica disponvel em algumas linguagens de programao. Um vetor consiste de componentes homogneos, ou seja, do mesmo tipo, chamado tipo base. Assim, um vetor pode ser classificado como uma estrutura homognea (Wirth, 1999). Um vetor em uma linguagem de programao pode ser chamado de array quando for unidimensional, e matriz para quando bidimensionais. Os arrays mantm uma srie de elementos de dados do mesmo tipo de dados e tamanho fixo. Elementos individuais so acessados por sua posio em linha no array. A posio dada por um ndice. O ndice geralmente utiliza uma seqncia de nmeros inteiros. Alguns arrays so multidimensionais, contendo linhas e colunas. A figura 1 apresenta um vetor ou tambm chamado array unidimensional, e uma matriz multidimensional. Os arrays podem-se considerar como as estruturas de dado mais simples que possvel imaginar e tm a vantagem de que os seus elementos so acessveis de forma rpida.

FIGURA 1 VETOR

OU ARRAY

UNIDIMENSIONAL E MATRIZ MULTIDIMENSIONAL

3. ALGORITMOS DE PESQUISA E ORDENAO


O termo algoritmo vem da palavra rabe alkharizmi, originria do nome de um matemtico persa chamado Abu Jafar Mohammed Ibn Musa al Khowarizmi, autor de um livro-Texto sobre matemtica no sculo IX (Knuth, 1973). Em portugus, a palavra quer dizer operao ou processo de clculo. De maneira geral, o termo algoritmo evoca a noo de um processo para resolver um dado problema. O algoritmo no a soluo do problema mais sim a forma de obt-la. Com o uso de computadores como ferramentas, e atravs de mtodos previamente conhecidos, possvel buscar solues para problemas matemticos. Dentro deste conceito, um algoritmo uma seqncia ordenada finita de operaes bem definidas e eficazes que, quando executadas por um computador, operando sobre dados caracterizando o estado atual do contexto e o estado desejado, sempre terminando num determinado perodo de tempo, produzindo soluo ou indicando que a soluo no pode ser obtida (Swait, 2002). Desta forma sero apresentados mtodos de ordenao ou algoritmos de ordenao que tem como princpio e objetivo colocar em ordem valores inseridos em vetores. Os valores podem ser nmeros ou letras do alfabeto, e a ordem dos valores pode ser crescente ou decrescente.

4.1. ALGORITMO POR INSERO DIRETA


Este mtodo muito utilizado por jogadores de cartas. So entregues os elementos (cartas) aos jogadores. Os jogadores verificam as cartas, e atravs de movimentos sucessivos deslocando e inserindo os elementos, colocam suas cartas em uma ordem adequada. O mesmo ocorre como o mtodo de ordenao por insero direta. Atravs de movimentos sucessivos, o mtodo de ordenao agrupa elementos em uma determinada ordem. A figura 2 apresenta um vetor com nmeros que devem ser colocados em ordem crescente, e a interao sucessiva de movimentos da esquerda para a direita, sempre comparando o nmero selecionado com o anterior. Quando o nmero selecionado menor que o nmero anterior, o nmero selecionado inserido na sua posio correta, por isso o mtodo do algoritmo de busca e ordenao chama-se insero direta, porque insere o nmero selecionado na sua posio correta. A princpio verifica-se que o vetor contm 8 elementos desordenados, que sero colocados em ordem crescente atravs de interaes sucessivas do algoritmo por insero direta: 44, 55, 12, 42, 94, 18, 06, 67; O algoritmo de ordenao por insero direta comea percorrendo o vetor da esquerda para a direita, comparando os valores 44, 45, e na seqncia encontrando o valor 12. Como o valor 12 menor que o anterior, atravs do mtodo de insero direta o valor 12 colocado para o inicio do vetor na sua correta posio.

FIGURA 2 ORDENAO POR INSERO DIRETA 12, 44, 55, 42, 94, 18, 06, 67; O algoritmo inicia novamente percorrendo o vetor da esquerda para a direita, com isso verifica os valores 12, 44, 55, quando encontra o valor 42. Como o valor 42 menor que o anterior, ocorre uma insero direta e o valor 42 colocado no vetor na sua correta posio. 12, 42, 44, 55, 94, 18, 06, 67; Novamente inicia-se o algoritmo de ordenao por insero percorrendo o vetor da esquerda para a direita, comparando os valores 12, 42, 44, 55, 94, quando encontra o valor 18. Como o valor 18 menor que o anterior, ocorre uma insero direta e o valor 18 colocado no vetor na sua correta posio. 12, 18, 42, 44, 55, 94, 06, 67; A interao sucessiva continua at que o vetor esteja completamente em ordem, a quarta interao do algoritmo verifica novamente os valores 12, 18, 42, 44, 55, 94, quando encontra o valor 06. Como o valor 06 menor que o anterior, ocorre novamente o processo de insero direta e o valor 06 colocado para o inicio do vetor na sua correta posio. 06, 12, 18, 42, 44, 55, 94, 67; Para completar a ordenao, novamente ocorre outra interao no vetor, comparando os valores 06, 12, 18, 42, 44, 55, 94, quando encontra o valor 67. Como o valor 67 menor que o valor anterior, ocorre o processo de insero direta, e o valor 67 colocado no vetor na sua correta posio. 06, 12, 18, 42, 44, 55, 67, 94; Como possvel verificar, o algoritmo de insero direta compara o nmero selecionado com o nmero anterior, e caso nmero selecionado seja menor que o anterior, ocorre o processo de insero direta, colocando o nmero selecionado na sua posio correta. Foram necessrias cinco interaes para colocar os valores em ordem

crescente no vetor. O algoritmo por insero pode funcionar em dois sentidos, com movimentos da esquerda para direita conforme verificado no exemplo acima, ou no sentido da direita para esquerda.

4.2. ALGORITMO POR SELEO DIRETA


O mtodo de ordenao por seleo direta funciona de maneira bem simples. O algoritmo de ordenao percorre o vetor no sentido da esquerda para a direita, sempre procurando pelo menor nmero que ainda no foi ordenado. Quando o algoritmo encontra um nmero menor que no foi ordenado, ocorre um processo de substituio ou troca, entre o menor nmero e o primeiro nmero que ainda no est na ordem partindo da esquerda para a direita Desta forma o algoritmo realiza interaes sucessivas at que o vetor contenha valores em ordem. A figura 3 apresenta o vetor que contm 8 elementos desordenados, que sero colocados em ordem crescente atravs de selees sucessivas.

FIGURA 3 ORDENAO POR SELEO DIRETA 44, 55, 12, 42, 94, 18, 06, 67; O algoritmo inicia localizando o menor valor do vetor, encontrando o valor 06. Em seguida troca o valor 06 pelo valor 44, transformando-se no primeiro nmero ordenado do vetor; 06, 55, 12, 42, 94, 18, 44, 67; O processo se repete, e o algoritmo varre novamente o vetor, realizando nova seleo, desta vez encontrando o valor 12. Em seguida troca o valor 12 pelo valor 55, formando o segundo nmero ordenado do vetor. 06, 12, 55, 42, 94, 18, 44, 67;

Novamente o algoritmo busca no vetor o menor valor, encontrando o valor 18. Em seguida troca o valor 18 pelo valor 55, acrescentando o terceiro nmero ordenado do vetor. 06, 12, 18, 42, 55, 94, 44, 67; O movimento de interaes continua, o algoritmo de seleo direta encontra o menor nmero no vetor no momento, o valor 42, definindo como o quarto nmero do vetor, que se encontra na posio correta. Em seguida localizado o valor 44, que troca de posio com o valor 55, formando o quinto e sexto nmero ordenado do vetor. 06, 12, 18, 42, 44, 55, 94, 67; Faltando apenas uma interao, o algoritmo de seleo direta localiza o valor 67 ainda fora da ordem crescente. Ocorre a troca entre o valor 67 e o valor 94, ordenando o restante do vetor. 06, 12, 18, 42, 44, 55, 67, 94; O algoritmo de seleo direta funciona sempre selecionando o menor valor que ainda no esteja na sua ordem correta, e em seguida coloca-se o valor selecionado na posio correta no vetor. Foram necessrias cinco interaes para colocar os valores em ordem crescente no vetor.

4.3. ALGORITMO BUBBLESORT


Este mtodo tambm conhecido como o mtodo de ordenao por bolha. A principal caracterstica nesse mtodo a ao de permuta entre elementos do vetor. O movimento do algoritmo de busca BubbleSort trabalha da esquerda para a direita. Ocorre a comparao entre dois elementos de um vetor, caso o segundo valor seja menor que o primeiro valor, acontece a troca de posio entre os valores ou tambm chamada a permuta. Desta forma o algoritmo BubbleSort realiza interaes sucessivas at que o vetor contenha valores em ordem. A figura 4 apresenta o vetor onde se verifica que contm 6 elementos desordenados que formam a palavra ORDENA, onde os caracteres sero colocados em ordem crescente:

FIGURA 4 VETOR DESORDENADO COM A PALAVRA ORDENA A figura 5 apresenta todas as interaes e movimentos realizados pelo algoritmo BubbleSort para ordenar do vetor em ordem alfabtica. A figura 5 est dividida em cinco ciclos de interaes conforme a numerao dos itens. No item (1) o algoritmo inicia-se comparando os valores O e R, que se mantm nos seus lugares porque em ordem alfabtica, o valor O menor que R. Em seguida so comparados os valores R e D. Como o valor R em ordem

alfabtica maior que o valor D, ocorre a troca de posio entre valores, ou tambm se pode dizer que ocorre a permuta entre os valores. O, R, D, E, N, A; O, D, R, E, N, A;

Novamente o algoritmo BubbleSort compara os valores R e E. Como o valor R em ordem alfabtica maior que o valor E, ocorre nova permuta de posies entre os valores. O, D, E, R, N, A; Em seguida o algoritmo de ordenao compara outros dois valores o R e N. Como o valor R em ordem alfabtica maior que o valor N, ocorre a permuta de posies entre os valores. O,D, E, N, R, A; Repetindo o processo at o vetor se encontrar com os valores em ordem crescente, novamente o algoritmo BubbleSort compara os valores R e A. Como o valor R em ordem alfabtica maior que o valor A, ocorre a permuta de posies entre os valores. O, D, E, N, A, R;

FIGURA 5 ORDENAO POR MTODO BUBBLESORT Assim se encerra o primeiro ciclo de ordenao do algoritmo BubbleSort e comea o segundo ciclo no item (2) da figura 5, o processo inicia-se novamente,

comparando o valor O com os demais valores do vetor, at que encontre sua posio correta. O, D, E, N, A, R; D, O, E, N, A, R; D, E, O, N, A, R; D, E, N, O, A, R; D, E, N, A, O, R;

Continuando o processo de ordenao, o mtodo BubbleSort s deve parar quando os valores do vetor estiverem todos em ordem alfabtica crescente. Observando o item (3) da figura 5, comea o terceiro ciclo comparando o valor D com os demais valores do vetor. Como o valor D menor que o valor E, so mantidas as posies. D, E, N, A, O, R; O processo continua atravs da comparao do valor E com os demais valores do vetor. Como o valor E em ordem alfabtica menor que o valor N, so mantidas as posies. D, E, N, A, O, R; Agora o processo passa a comparar o valor N com os demais valores do vetor. Como o valor N maior que o valor A, ocorre a permuta, sendo que o valor N encontra seu lugar correto na ordenao. D, E, N, A, O, R; D, E, A, N, O, R;

Observa-se no item (4) que o valor D menor que o valor E, so mantidas as posies, e em seguida so comparados os valores E e A. Como o valor E em ordem alfabtica maior que o valor A, ocorre a permuta de posies entre os valores. D, A, E, N, O, R; D, A, E, N, O, R;

O item (5) da figura 5, encerra o processo de ordenao, o quinto ciclo de interaes realiza apenas a comparao entre os valores D e A, como o valor D em ordem alfabtica maior que o valor A, ocorre novamente permuta de posies entre os valores. A, D, E, N, O, R; Desta maneira o algoritmo ordenao completa a ordenao do vetor. O algoritmo de ordenao BubbleSort trabalha em ciclos de interaes sucessivas comparando valores de um vetor. Quando so comparados dois valores, e percebe-se que o segundo valor menor que o primeiro valor, ocorre a troca de posies entre os valores, ou tambm chamada permuta de posies entre valores em um vetor.

4.4. ALGORITMO MERGESORT


O mtodo de ordenao MergeSort tem como sua principal caracterstica empregar a tcnica de dividir para conquistar, desta forma o vetor dividido por dois sucessivamente, at encontrar a menor unidade. Quando o mtodo de ordenao MergeSort encontra a menor unidade, so realizadas comparaes sucessivas, e a partir das comparaes o vetor novamente montado em ordem. A figura 6 demonstra como o mtodo de ordenao MergeSort divide-se por dois sucessivamente. O vetor original contm 8 elementos dividido em dois vetores com 4 elementos, que so divididos em 4 vetores e dois elementos, finalizando com oitos vetores de 1 elemento, encontrando a menor unidade. O primeiro item (1) da figura 6, apresenta um vetor com o valor de n com 8 elementos ou n = 8 sendo dividido por dois, surgindo dois vetores com 4 elementos n = 4. O item (2) da figura 6, divide os dois vetores que surgiram em quatro vetores com dois elementos n = 2. Finalmente no terceiro item (3) da figura 6, o mtodo de ordenao MergeSort encontra a menor unidade, formando oito vetores de uma unidade n = 1. A figura 7 apresenta o primeiro ciclo de comparaes entre os vetores com apenas uma unidade de valor n = 1. Os vetores so comparados em pares, o vetor de valor 1 comparado com o vetor de valor 4, o vetor de valor 8 comparado com o vetor de valor 3, e assim sucessivamente.

FIGURA 6 DIVISO DO VETOR PELO MTODO MERGESORT

FIGURA 7 COMPARAO ENTRE VETORES DE TAMANHO N = 1 O primeiro par de valores comparado, caso o primeiro valor seja menor que o segundo valor as posies so mantidas, como o valor 1 menor que o valor 4, ento as posies so mantidas. Porm na segunda comparao o valor 8 maior que o valor 3, desta forma os valores so invertidos. Conforme se pode verificar na figura 7, ainda ocorrem comparao entre os valores 6 e 5 que invertem posies, e a comparao entre os valores 2 e 7 que mantm suas posies. Aps as comparaes entre vetores n = 1, os mesmos so juntados em vetores de tamanho n = 2 criando um novo vetor. Encerra-se a primeiro ciclo de interaes do processo de ordenao atravs do mtodo MergeSort. Iniciando o segundo ciclo, so comparados vetores com tamanho n = 2. A figura 8 apresenta dois lados (esquerdo e direito) com a comparao entre vetores de tamanho n = 2. Observando o lado esquerdo, o valor 1 do primeiro vetor com o valor 3 do segundo vetor. Como o valor 1 menor que o valor 3, o valor 1 colocado na primeira posio de um novo vetor de tamanho n = 4. Em seguida so comparados o valor 4 do primeiro vetor com o valor 3 do segundo vetor. Como o valor 4 do primeiro vetor maior que o valor3 do segundo vetor, coloca-se o valor 3 na segunda posio do novo vetor de tamanho n = 4. Sobra apenas o valor 4 no primeiro vetor e o valor 8 no segundo vetor. Como o valor 4 menor que o valor 8, o valor 4 colocado na terceira posio do vetor de tamanho n = 4, e por fim na ltima posio colocado o valor 8. Desta maneira um novo vetor ordenado com quatro elementos criado, o mesmo processo ocorre no lado direito da figura, onde so comparados os valores de dois vetores de tamanho n = 2 criando tambm um novo vetor de tamanho n = 4.

FIGURA 8 COMPARAO ENTRE VETORES DE TAMANHO N = 2 A figura 9 apresenta o terceiro e ltimo ciclo de interaes do mtodo de ordenao MergeSort que deve ser acompanhada a princpio de cima para abaixo no lado esquerdo, e em seguida de cima para abaixo no lado direito com a comparao de vetores com tamanho n = 4. Novamente inicia-se o processo da comparao entre valores, o valor 1 do primeiro vetor comparado com o valor 2 do segundo vetor. Como o valor 1 maior que o valor 2, cria-se um novo vetor de tamanho n = 8 e coloca-se o valor 1 na primeira posio do novo vetor. Em seguida ocorre a comparao entre valores, o valor 3 do primeiro vetor comparado com o valor 2 do segundo vetor. Como o valor 3 maior que o valor 2, coloca-se o valor 2 na segunda posio do novo vetor. Na seqncia do processo, so comparados, o valor 3 do primeiro vetor com o valor 5 do segundo vetor, e como o valor 3 menor que o valor 5, coloca-se o valor 3 na terceira posio do vetor. Verifica-se na figura 9 que o algoritmo MergeSort trabalha em ciclos de interaes sucessivas, divide um vetor de maior tamanho em tamanhos menores, at que encontre o menor tamanho n = 1, e aps a diviso, remonta o vetor no seu tamanho original ordenando os valores nele contidos. Na fase final do processo de ordenao as comparaes entre os dois vetores de tamanho n = 4 continua at todos os valores estejam em ordem.

FIGURA 9 COMPARAO ENTRE VETORES DE TAMANHO N = 4

4.5. ALGORITMO HEAPSORT


O mtodo de ordenao HeapSort tem como sua principal caracterstica empregar uma rvore binria ou heap binrio. O heap binrio composto pelos valores de um determinado vetor em formato de rvore binria. A figura 10 apresenta um vetor com valores e uma rvore binria ou tambm chamada heap binrio contendo os valores do vetor. importante observar que a ordem dos valores contida no vetor determina a ordem dos valores no heap binrio.

FIGURA 10 VETOR E HEAP BINRIO Para iniciar o algoritmo de ordenao HeapSort necessria a montagem do heap binrio com valores armazenados no vetor. A figura 11 apresenta o vetor com valores e forma de distribuio dos valores atravs do heap binrio. A linha vermelha

aponta para o primeiro item do vetor, com valor 4, que por ser o primeiro item encontra-se no topo do heap binrio. A linha azul seleciona o segundo e terceiro itens do vetor, que se encontram posicionados na parte intermediria do heap binrio. A linha lils seleciona os quatro ltimos itens do vetor, que se encontram posicionados na base do heap binrio.

FIGURA 11 DISTRIBUIO DE VALORES NO HEAP BINRIO Aps a montagem do heap binrio, ocorre o processo de organizao antecedendo o processo de ordenao do algoritmo. A figura 12 apresenta o processo de organizao que acontece sempre no sentido da direita para a esquerda, na primeira linha aps o topo. Desta forma o valor 2 comparado com o valor acima e com o valor abaixo. Na comparao com o valor acima, o valor 2 menor que o valor 4 ento so mantidas as posies. Porm quando o valor 2 comparado com o valor 8, ocorre a troca de posies, porque o valor 8 maior que o valor 2.

FIGURA 12 ORGANIZANDO VALORES NO HEAP BINRIO Aps a troca de posies entre valores 2 e 8, possvel observar que o vetor que armazena os valores respectivos ao heap binrio tambm se altera conforme as

mudanas. A seguir o processo de organizao verifica o segundo nmero, o valor 9, comparando com o valor acima e com o valor abaixo. Quando comparado o valor 9 com o valor 4, ocorre nova troca entre valores, porque o valor 9 maior que o valor 4. Em seguida o valor 4 comparado com os valores abaixo, e como o valor 4 menor que o valor 5, ocorre outra troca entre valores. A figura 13 demonstra o final do processo de organizao do heap binrio e como ficou a distribuio dos valores no vetor aps as mudanas.

FIGURA 13 ORGANIZANDO VALORES NO HEAP BINRIO Aps a realizao do processo de organizao do heap binrio inicia-se o processo de ordenao. O algoritmo de ordenao funciona no sentido da direita para a esquerda, da camada mais profunda para as camadas superiores do heap binrio, a figura 14 apresenta o inicio do processo de ordenao. O processo de ordenao primeiro troca o menor valor da camada mais inferior com valor do topo do heap binrio. O item 1 da figura comea apresentando a substituio do valor 2 na base com o valor 9 no topo do heap binrio. Com isso o valor 9 eliminado do heap binrio e colocado definitivamente na ltima posio do vetor sendo considerado o maior valor do vetor. Em seguida o item 1 na figura 14, demonstra uma re-organizao do heap binrio, sempre no sentido da direita para a esquerda, assim como o valor 2 menor que o valor 8, os valores trocam de posies, e como valor 2 menor que o valor 6 ambos tambm trocam de posio. Em paralelo, a eliminao do valor 9 no heap binrio e as troca de posies entre valores, podem ser verificadas na disposio dos valores no vetor. O item 2 apresenta uma nova ao de interao no processo de ordenao, da mesma forma que a primeira ao de interao no item 1, o processo se inicia

novamente trocando o menor valor da base com o valor do topo do heap binrio. O valor 2 troca de posio com valor 8 que em seguida eliminado, sendo colocado na sua posio definitiva no vetor. Aps a troca e a eliminao do valor 8, ocorre nova re-organizao do heap binrio, desta forma o valor 2 troca de posio com o valor 6 mantendo o maior valor no topo.

FIGURA 14 PRIMEIRO E SEGUNDO PASSOS DE ORDENAO NO HEAP BINRIO A figura 15 atravs dos itens 1 e 2 apresenta o terceiro e quarto passos para a ordenao do vetor atravs da manipulao de um heap binrio. O item 1 em princpio mostra a troca entre valores 2 na camada mais profunda e o valor 6 no topo, e em seguida a eliminao do valor 6, que colocado na sua correta posio no vetor. Ainda no item 1, so realizados procedimentos re-organizao, desta maneira como o valor 2 menor que o valor 5, os valores trocam de posio. O valor 2 tambm menor que o valor 4, e ambos trocam de posio. O segundo item inicia-se com a troca do valor 2 na base com o valor 5 no topo. O valor 5 eliminado e colocado na posio correta no vetor. Em seguida inicia-se novamente o processo de re-organizao, comparando os valores 2 no topo com o valor 4, como o valor 2 menos que o valor 4, ambos trocam de posio. Ainda ocorre a comparao entre o valor 2 e o valor 1, porm o valor 1 menor que o valor 2, ento as posies se mantm. Aps as eliminaes e movimentaes dos valores no heap binrio do terceiro e quarto passos possvel verificar que metade dos valores contidos no vetor j se encontram ordenados de modo crescente. A figura 16 apresenta os quinto e sexto passos para finalizar a ordenao por mtodo HeapSort.

O item 1 da figura 16 apresenta a troca de valores entre 1 na camada mais profunda com 4 no topo. Em seguida o valor 4 eliminado sendo colocado na sua correta posio no vetor. Novamente os valores so re-organizados, e como o valor 1 no topo menor que o valor 2, ambos trocam de posies.

FIGURA 15 TERCEIRO E QUARTO PASSOS DE ORDENAO NO HEAP BINRIO

FIGURA 16 QUINTO E SEXTO PASSOS DE ORDENAO NO HEAP BINRIO No item 2 ocorre a troca de valores entre 1 na camada mais profunda com 2 no topo. Em seguida o valor 2 eliminado sendo colocado na sua correta posio no vetor. Restando apenas o valor 1, o mesmo colocado na sua correta posio no vetor. O processo de ordenao por HeapSort se encerra apresentando todos valores em ordem crescente no vetor.

4.6. ALGORITMO QUICKSORT


O melhor algoritmo de ordenao o QuickSort, que foi inventado em 1962 por C. Hoare, professor de programao na universidade Oxford. A idia principal partir o vetor em dois vetores menores, e colocar os valores de um modo que no primeiro vetor tenham valores que sejam menores ou iguais a todos os valores do segundo vetor. Uma vez definida a estratgia, o problema para a ordenao est resolvido, aplicado sucessivamente a mesma idia, com os dois vetores partidos cada um deles em mais dois vetores, formando quatro vetores, e assim sucessivamente. Para fazer a partio que est na base do algoritmo quicksort, comea por escolher um valor arbitrrio no vetor, normalmente o valor mais ao meio do vetor, que ser chamado de piv. A figura 17 apresenta um vetor com doze elementos chamados de valores e o valor 4 definido como piv inicial.

FIGURA 17 VETOR COM VALORES DESORDENADOS E O PIV Em seguida na figura 18 inicia-se o processo de sucessivas interaes para ordenar o vetor. Depois que se escolheu um piv, o algoritmo percorre o vetor da esquerda para direita, procurando um valor que no seja menor do que o piv, em paralelo, percorre-se tambm da direita para a esquerda, procurando um valor que no seja maior do que o piv.

FIGURA 18 APLICANDO MTODO QUICKSORT COM UM PIV E DOIS VETORES

O algoritmo localiza o valor 7 maior que o piv do lado esquerdo e o valor 3 do lado direito menor que piv, ambos trocam de lados, em seguida o algoritmo localiza o valor 9 maior que o piv do lado esquerdo e o valor 2 menor que piv do lado direito, com os valores tambm trocando de lado. Ainda trocam de posio os valores 8 do lado esquerdo com o valor 4 do lado direito. Com a ltima troca de posies ocorrendo entre valores com o valor 4 e o valor 2. Aps as trocas de posies entre valores, formam-se dois vetores, um do lado esquerdo com todos valores menores ou iguais ao piv e outro do lado direito com todos os valores maiores ou iguais ao piv. A figura 19 apresentada abaixo, primeiro define dois novos pivs, com um piv para cada vetor. Em seguida dividem com linhas vermelhas na vertical dois vetores em quatro novos vetores, com o primeiro piv para os vetores 1 e 2 e o segundo piv para os vetores 3 e 4. Desta maneira o processo de organizao se repete, com um processo sendo percorrido da esquerda para direita e outro da direita para esquerda entre o vetor 1 e o vetor 2 e entre o vetor 3 e o vetor 4. No primeiro vetor so comparados os valores 3 e 2, como o piv nesse caso igual ao valor 3, ambos valores trocam de posio, em seguida so comparados os valores 3 e 2 que tambm trocam de posies. No segundo vetor o mesmo processo se estabelece, so comparados os valores 7 e 5 que trocam de posies, e em seguida so comparados os valores 8 e 7 que novamente, tambm trocam de posies.

FIGURA 19 APLICANDO MTODO QUICKSORT COM DOIS PIVS E QUATRO VETORES Ao final, a figura 19 apresenta quatro vetores ordenados em ordem crescente, quase totalizando a ordenao do vetor. Conforme verificado nas descries anteriores, novamente ser necessrio dividir os quatro vetores, para o algoritmo QuickSort finalizar o processo de ordenao. A figura 20 apresenta a nova diviso dos vetores e a definio de quatro pivs, e um conjunto de oito vetores. Inicia-se quatro processos paralelos de busca por valores, maiores ou iguais que o piv da esquerda para a direita, e menores ou iguais que o piv da direita para a

esquerda. A figura 20 apresenta a seleo de quatro valores como piv e comparao e troca de posies entre valores do lado esquerdo com valores do lado direto. No primeiro par de vetores, so comparados os valores 2 e 1 e como o valor 2 maior que o valor 1, ambos trocam de posies. Em seguida so comparados os valores 4 e 3 e novamente ambos tambm trocam de posies porque o valor 4 maior que o valor 3. Entre o quinto e sexto vetor no ocorrem troca de posies entre valores, finalizando no na ltima troca de valores entre o stimo vetor e o oitavo vetor. Ocorre a comparao entre o valor 9 e o valor 7, trocando de posies porque o valor 9 maior que o valor 7.

FIGURA 20 APLICANDO MTODO QUICKSORT COM QUATRO PIVS E OITO VETORES Ao final o vetor encontra-se com seus valores ordenados de forma crescente conferindo a eficincia do funcionamento do mtodo de ordenao QuickSort.

4.7. ALGORITMO SHELLSORT


O mtodo de ordenao ShellSort tem como sua principal caracterstica utilizar um numero de incremento para auxiliar no processo de ordenao O valor inicial para nmero de incremento igual ao total de valores do vetor dividido por dois. Na figura 21 apresenta um vetor com 8 valores e o valor inicial para o nmero de incremento igual a 4.

FIGURA 21 VETOR COM VALORES DESORDENADOS E NUMERO DE INCREMENTO O nmero de incremento empregado como referncia na seleo de valores do vetor para realizar o processo de ordenao. A figura 22 apresenta o primeiro ciclo de interaes de movimentos e troca de posies entre valores no vetor empregando o mtodo ShellSort.

Como o valor do nmero de incremento igual a 4, a comparao entre valores ocorre entre os valores 1 e 6, 4 e 5, 8 e 2, 3 e 7, sempre comparando o valor com o valor quatro posies frente, conforme o nmero de incremento. Durante a comparao se o primeiro valor for maior que o segundo valor, ocorre a troca de posio entre ambos, caso contrrio, as posies se mantm. Na figura 21 as posies entre os valores 1 e 6, 4 e 5, 3 e 7 so mantidas porque os primeiros valores so menos que os segundo valores. Porm entre os valores 8 e 2, os valores trocam de posies porque o valor 8 maior que o valor 2.

FIGURA 21 PRIMEIRO CICLO DE INTERAES NO MTODO SHELLSORT Aps o primeiro ciclo de interaes do mtodo ShellSort, pode-se observar os valores no vetor caminhando para a ordenao. A figura 22 apresenta o segundo ciclo de interaes para realizar o processo de ordenao. A principal diferena no processo est no valor do nmero de incremento, que divido por dois. Desta maneira a seleo de valores para comparao passa a ser aps duas posies no vetor.

FIGURA 22 SEGUNDO CICLO DE INTERAES NO MTODO SHELLSORT So comparados os pares de valores 1 e 2, 4 e 3, 6 e 8, 5 e 7, agora os valores so escolhidos com a diferena de duas posies. Os valores 1 e 2, 6 e 8, 5 e 7, mantm suas posies e os valores 4 e 3 trocam de posies porque o valor 4 maior que o valor 3. A comparao e troca de posies entre valores no segundo ciclo de iteraes formam a nova posio dos valores no vetor.

A figura 23 apresenta o terceiro ciclo de interaes no vetor. O valor do nmero de incremento novamente dividido por dois. As comparaes entre valores no vetor ocorrem com valores sucessivos. Os valores 4 e 2, 6 e 5, 8 e 7 trocam de posies porque os primeiros valores so maiores que os segundos valores respectivos. Em seguida o valor 4 e o valor 3 tambm trocam de posies finalizando a ordenao do vetor atravs do mtodo ShellSort.

FIGURA 23 TERCEIRO CICLO DE INTERAES NO MTODO SHELLSORT O mtodo ShellSort utiliza um valor para definir o nmero de incremento empregado no processo de seleo de valores. A escolha na seleo dos valores deve respeitar o posicionamento atravs da distncia do nmero de incremento. O vetor passa por comparaes sucessivas e troca de posies entre valores, compondo o processo de ordenao.

4.8. ALGORITMO RADIXSORT


O mtodo de ordenao RadixSort trabalha de maneira bem simples. O algoritmo de ordenao percorre o vetor verificando os dgitos de cada valor, e conforme verifica, divide os valores em grupos de valores entre 0 e 9 em ordem crescente. No primeiro ciclo de interaes do processo de ordenao, ser verificado o primeiro digito de cada valor da direita para a esquerda. A figura 24 apresenta o vetor com 10 valores que sero organizados em ordem crescente.

FIGURA 24 VETOR COM VALORES DESORDENADOS NO MTODO RADIXSORT O algoritmo verifica cada valor contido no vetor, e coloc-los em grupos conforme o valor de seu primeiro digito. A figura 25 apresenta o primeiro ciclo de interaes para a ordenao dos valores no vetor, que so separados em grupos, com

dois valores com o digito de valor 0, trs valores com digito de valor 3, um valor com digito de valor 4, dois valores com digito de valor 8 e dois valores com digito de valor 9. Em seguida os valores so colocados novamente no vetor, respeitando a ordem crescente ao qual os grupos que foram separados.

FIGURA 25 PRIMEIRO CICLO DE INTERAES DO MTODO RADIXSORT O segundo ciclo de interaes demonstrado na figura 26, a seleo dos valores agora verifica o segundo digito da direita para a esquerda, formando novos grupos de valores entre 0 e 9 em ordem crescente. So separados em grupos pelo segundo digito, um valor de digito de valor 0, trs valores de digito de valor 1, quatro valores de digito de valor 2 e dois valores de digito de valor 9. Em seguida os valores so colocados novamente no vetor, respeitando a ordem crescente ao qual pertencem aos grupos que foram separados.

Figura 26 Segundo ciclo de interaes do mtodo RadixSort O ltimo ciclo de iteraes realiza novamente o procedimento de seleo de valores divididos por grupos, porm so selecionados os valores pelo terceiro digito no sentindo da direita para esquerda de cada valor. A figura 27 apresenta como foram selecionados os valores, e seus respectivos grupos. Ao final do terceiro ciclo o vetor encontra-se com os valores de forma organizada em ordem crescente. O Algoritmo RadixSort aparece como uma boa opo como mtodo de ordenao mantendo uma boa eficincia ordenando grande e pequenos volumes de dados em tempo reduzido.

Figura 27 Terceiro ciclo de interaes do mtodo RadixSort

4. A EFICINCIA DE ALGORITMOS
Antes de qualquer considerao em relao eficincia dos algoritmos, importante ressaltar que todos algoritmos apresentados, solucionam um dado problema de ordenao, portanto so teis e empregados em diversas situaes. Dados dois ou mais algoritmos para solucionar o mesmo problema, sensato escolher aquele que obtm uma soluo no menor tempo possvel e utiliza o menor espao para representao dos dados do problema (SWAIT, 2002).

4.1. MEDIDAS
Numa mquina seqencial, o tempo total de execuo de um algoritmo composto da soma de tempos de execuo das operaes primitivas. Em princpio, um histograma das freqncias de execuo de cada operao primitiva e uma tabela de tempos de execuo individual seria suficiente para prevermos o tempo necessrio para obter a soluo de um dado problema (SWAIT, 2002). Quando um algoritmo de ordenao deve realizar seu trabalho, pode-se dizer que o algoritmo trabalha na soluo de um dado problema. Este problema tem um determinado grau de complexidade, e conforme a complexidade, maiores so as dificuldades e o maior tempo para a soluo do problema. A tabela 1 apresenta as ordens de complexidade, que so um conjunto de notaes matemticas que indicam o grau de complexidade de um determinado algoritmo de pesquisa e ordenao. As classes enumeradas na tabelas 1 esto em ordem de esforo crescente, desta maneira os algoritmos mais desejveis esto no incio da lista.

constante log log logartmica linear n log n quadrtica cbica exponencial

O(1) O(log log n) O(log n) O(n) O(n log n) O(n) O(n) O(2n)

Tabela 1 Ordens de complexidades de algoritmos A notao O() permite distinguir entre algoritmos com diferenas de ordens de magnitude, apresentando por exemplo, um algoritmo com grau de complexidade linear O(n) e outro algoritmo com grau de complexidade exponencial O(2n), fornecendo meios para considerar que o algoritmo de grau de complexidade linear mais eficiente que um algoritmo de grau exponencial. Em parte sim, a tabela com as ordens de complexidade uma forma de verificar qual algoritmo mais eficiente, porm tambm necessrio considerar a quantidade de memria utilizada para realizar o processo de ordenao de um determinado algoritmo. O volume de dados a ser ordenado pode influenciar de diversas maneiras, tanto de forma favorvel como de maneira negativa. Por exemplo, pode-se ter uma massa grande de dados para ordenar, porm os mesmos j esto 50% organizados, porque so inseridos de uma forma previamente semi-organizada. Entretanto, pode-se ter uma base de dados pequena, mais com os dados muito embaralhados, exigindo um grande nmero de troca de posies entre os dados para efetivar uma ordenao. Outra possibilidade que um algoritmo normalmente codificado em uma determinada linguagem de programao, para ser executado em um computador. As linguagens de programao funcionam de diferentes maneiras podendo tambm afetar no desempenho, e na eficincia da execuo do algoritmo de ordenao. A tabela 2 apresenta os algoritmos, distribudos quando esto no processo de ordenao no melhor, pior e na mdia dos casos. O RadixSort aparece como uma boa opo em todos os casos. O mtodo de insero, seleco e ShellSort aparecem como uma boa opo nos seus melhores casos. Ficando os piores casos a princpio para o HeapSort, MergeSort e QuickSort, porm so de fcil implementao e manuteno atravs de cdigos o que justifica tambm sua escolha como opo. Desta maneira a melhor concluso na escolha de um algoritmo de ordenao est em considerar as condies, como o volume de dados, a ordem dos dados, a linguagem de programao escolhida para implementar o algoritmo, o computador e quantidade de memria empregados no processo de ordenao.

Caso Mdio Melhor Caso RadixSort MergeSort QuickSort ShellSort Insero Seleo HeapSort BubbleSort O(n) O(n log n) O(n log n) O(n1,5) O(n) O(n) O(n log n) O(n) O(n) O(n log n) O(n log n) O(n) O(n) O(n) O(n log n) O(n log n)

Pior Caso O(n) O(n log n) O(n) O(n1,5) O(n) O(n) O(n) O(n)

Tabela 2 Mdio, melhor e pior casos dos algoritmos de ordenao

REFERNCIAS
Knuth, D. The Art of Computer Programming Vol 3: Sorting and Searching. Addison-Wesley Publ. Co., Reading, Massachusetts, EUA, 1973. Swait, J. D. Fundamentos computacionais Algortimos e Estrutura de Dados. editora McGraw-Hill, So Paulo, 2002. Wirth, N. Algortimos e Estrutura de Dados. editora LTC, Rio de Janeiro, 1999.

Você também pode gostar