SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Pesquisa e Ordenação
Sistemas de Informação
Domingos Bernardo Gomes Santos
Domingos Bernardo Gomes Santos
PESQUISA E ORDENAÇÃO
SISTEMAS DE INFORMAÇÕES
Educação a Distância
SUMÁRIO
1. INTRODUÇÃO........................................................................................................ 5
2. VETORES ................................................................................................................ 6
3. ALGORITMOS DE PESQUISA E ORDENAÇÃO................................................ 7
4.1. ALGORITMO POR INSERÇÃO DIRETA......................................................... 7
4.2. ALGORITMO POR SELEÇÃO DIRETA........................................................... 9
4.3. ALGORITMO BUBBLESORT ......................................................................... 10
4.4. ALGORITMO MERGESORT........................................................................... 13
4.5. ALGORITMO HEAPSORT .............................................................................. 16
4.6. ALGORITMO QUICKSORT ............................................................................ 21
4.7. ALGORITMO SHELLSORT ............................................................................ 23
4.8. ALGORITMO RADIXSORT ............................................................................ 25
4. A EFICIÊNCIA DE ALGORITMOS .................................................................... 27
4.1. MEDIDAS.......................................................................................................... 27
REFERÊNCIAS .................................................................................................... 30
ÍNDICE DE FIGURAS
FIGURA 1 – VETOR OU ARRAY UNIDIMENSIONAL E MATRIZ MULTIDIMENSIONAL ................. 6
FIGURA 2 – ORDENAÇÃO POR INSERÇÃO DIRETA .................................................................. 8
FIGURA 3 – ORDENAÇÃO POR SELEÇÃO DIRETA ................................................................... 9
FIGURA 4 – VETOR DESORDENADO COM A PALAVRA “ORDENA”...................................... 10
FIGURA 5 – ORDENAÇÃO POR MÉTODO BUBBLESORT......................................................... 11
FIGURA 6 – DIVISÃO DO VETOR PELO MÉTODO MERGESORT .............................................. 13
FIGURA 7 – COMPARAÇÃO ENTRE VETORES DE TAMANHO ”N = 1” ..................................... 14
FIGURA 8 – COMPARAÇÃO ENTRE VETORES DE TAMANHO “N = 2” ..................................... 15
FIGURA 9 – COMPARAÇÃO ENTRE VETORES DE TAMANHO “N = 4” ..................................... 16
FIGURA 10 – VETOR E HEAP BINÁRIO................................................................................ 16
FIGURA 11 – DISTRIBUIÇÃO DE VALORES NO HEAP BINÁRIO .............................................. 17
FIGURA 12 – ORGANIZANDO VALORES NO HEAP BINÁRIO................................................... 17
FIGURA 13 – ORGANIZANDO VALORES NO HEAP BINÁRIO................................................... 18
FIGURA 14 – PRIMEIRO E SEGUNDO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO.................. 19
FIGURA 15 – TERCEIRO E QUARTO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO.................... 20
FIGURA 16 – QUINTO E SEXTO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO.......................... 20
FIGURA 17 – VETOR COM VALORES DESORDENADOS E O PIVÔ ............................................ 21
FIGURA 18 – APLICANDO MÉTODO QUICKSORT COM UM PIVÔ E DOIS VETORES .................. 21
FIGURA 19 – APLICANDO MÉTODO QUICKSORT COM DOIS PIVÔS E QUATRO VETORES ......... 22
FIGURA 20 – APLICANDO MÉTODO QUICKSORT COM QUATRO PIVÔS E OITO VETORES......... 23
FIGURA 21 – VETOR COM VALORES DESORDENADOS E NUMERO DE INCREMENTO................ 23
FIGURA 21 – PRIMEIRO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT ............................ 24
FIGURA 22 – SEGUNDO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT ............................ 24
FIGURA 23 – TERCEIRO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT ............................ 25
FIGURA 24 – VETOR COM VALORES DESORDENADOS NO MÉTODO RADIXSORT..................... 25
FIGURA 25 – PRIMEIRO CICLO DE INTERAÇÕES DO MÉTODO RADIXSORT ............................ 26
ÍNDICE DE TABELAS
TABELA 1 – ORDENS DE COMPLEXIDADES DE ALGORITMOS ...................................................28
TABELA 2 – MÉDIO, MELHOR E PIOR CASOS DOS ALGORITMOS DE ORDENAÇÃO..............29
1. INTRODUÇÃO
A pesquisa e a ordenação aparecem como tema de constante discussão e como
foco de estudo de diversos pesquisadores. Atualmente a discussão está concentrada na
necessidade encontrada por sites de busca na internet, em conseguir realizar buscas
precisas e eficientes por informações. Ocorre ainda uma corrida tecnológica entre os
sites de busca por conseguir o melhor algoritmo de pesquisa, e com isso tornar-se à
referência, quando a necessidade na internet visa a busca pela informação.
Nesse contexto podem-se observar diversas literaturas ao longo do tempo, com
publicações sobre conceitos, definições e a necessidade em empregar métodos para a
pesquisa e a ordenação de dados:
No volume 3 da célebre série “A arte de programar computadores”
escrita por (Knuth, 1973), onde ele diz “acredito que quase todo aspecto
importante da programação ocorra como uma faceta de ordenação ou
pesquisa”.
Colocar um conjunto de dados em ordem (crescente ou decrescente) é
uma operação constantemente exigida, pois facilita muitas outras
operações subseqüentes, tais como a pesquisa por um dado específico
(Swait, 2002).
Em geral, entende-se a atividade de ordenação como sendo o processo
de rearranjo de um certo conjunto de objetos de acordo com um critério
(ordem) específico. O objetivo da ordenação é facilitar a localização
dos membros de um conjunto de dados. Assim sendo, é uma atividade
fundamental e universalmente utilizada para a elaboração de
algoritmos mais complexos. Exemplos de casos em que os objetos são
ordenados podem ser encontrados em listas telefônicas, impostos de
renda, índices, bibliotecas, dicionários, almoxarifados, etc... (Wirth,
1999).
Outro aspecto de relevância que deve ser considerando na busca da informação
de forma precisa, credita-se às bases de dados, não sendo apenas consideradas com
repositório de dados. Um repositório de dados apenas armazena informações sem
mecanismos de busca e procura por informações.
Para acrescentar ordem aos bancos de dados, foram criados diversos algoritmos
de pesquisa e ordenação. Os algoritmos de pesquisa ou ordenação nos permitem que
encontremos um determinado dado no meio de um milhão de dados. Entre os mais
importantes podemos citar BubbleSort com a ordenação por flutuação, HeapSort com a
ordenação por heap, InsertionSort com a ordenação por inserção e o QuickSort com um
método de ordenação rápido.
Na área gerencial ou de tomada de decisões em grandes organizações, os bancos
de dados exercem diversas funções. Através de algoritmos de ordenação empregados
para ordenar os dados, pode-se ter respostas às perguntas do tipo, "quais os produtos
mais vendidos esse ano?" ou "quais são os funcionários que tem maior salário?".
Um algoritmo constitui-se de um conjunto de procedimentos realizados em uma
determinada ordem que coloque em ordem um conjunto de dados em diversas situações.
Mas, por mais rápidos que sejam os computadores de hoje, o processo de pesquisa e
ordenação costuma ser bastante demorado. Para isso, os métodos de pesquisa e
ordenação demonstram formas de aperfeiçoar esses processos, fazendo o maior número
de operações com um mínimo de esforço possível do microprocessador.
Em caráter didático, para facilitar o estudo e o entendimento dos algoritmos de
pesquisa e ordenação na apostila, as informações serão colocadas em vetores e em
seguida ordenadas através de algoritmos. Para organizar ou pesquisar por uma
informação, é necessário que esta informação esteja armazenada em algum lugar. Um
vetor pode ser considerado um lugar ou local para armazenamento de um conjunto de
informações.
2. VETORES
Os vetores são, provavelmente, as estruturas de dados mais conhecidas; e talvez
mesmo, a única disponível em algumas linguagens de programação. Um vetor consiste
de componentes homogêneos, ou seja, do mesmo tipo, chamado tipo base. Assim, um
vetor pode ser classificado como uma estrutura homogênea (Wirth, 1999).
Um vetor em uma linguagem de programação pode ser chamado de array
quando for unidimensional, e matriz para quando bidimensionais. Os arrays mantêm
uma série de elementos de dados do mesmo tipo de dados e tamanho fixo.
Elementos individuais são acessados por sua posição em linha no array. A
posição é dada por um índice. O índice geralmente utiliza uma seqüência de números
inteiros. Alguns arrays são multidimensionais, contendo linhas e colunas. A figura 1
apresenta um vetor ou também chamado array unidimensional, e uma matriz
multidimensional. Os arrays podem-se considerar como as estruturas de dado mais
simples que é possível imaginar e têm a vantagem de que os seus elementos são
acessíveis de forma rápida.
FIGURA 1 – VETOR OU ARRAY UNIDIMENSIONAL E MATRIZ MULTIDIMENSIONAL
3. ALGORITMOS DE PESQUISA E ORDENAÇÃO
O termo algoritmo vem da palavra árabe alkharizmi, originária do nome de um
matemático persa chamado Abu Ja’far Mohammed Ibn Musa al Khowarizmi, autor de
um livro-Texto sobre matemática no século IX (Knuth, 1973). Em português, a palavra
quer dizer “operação ou processo de cálculo”. De maneira geral, o termo algoritmo
evoca a noção de um “processo para resolver um dado problema”. O algoritmo não é a
solução do problema mais sim a forma de obtê-la.
Com o uso de computadores como ferramentas, e através de métodos
previamente conhecidos, é possível buscar soluções para problemas matemáticos.
Dentro deste conceito, um algoritmo é uma seqüência ordenada finita de operações 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 período de tempo, produzindo solução ou indicando que a solução não
pode ser obtida (Swait, 2002).
Desta forma serão apresentados métodos de ordenação ou algoritmos de
ordenação que tem como princípio e objetivo colocar em ordem valores inseridos em
vetores. Os valores podem ser números ou letras do alfabeto, e a ordem dos valores
pode ser crescente ou decrescente.
4.1. ALGORITMO POR INSERÇÃO DIRETA
Este método é muito utilizado por jogadores de cartas. São entregues os
elementos (cartas) aos jogadores. Os jogadores verificam as cartas, e através de
movimentos sucessivos deslocando e inserindo os elementos, colocam suas cartas em
uma ordem adequada.
O mesmo ocorre como o método de ordenação por inserção direta. Através de
movimentos sucessivos, o método de ordenação agrupa elementos em uma determinada
ordem. A figura 2 apresenta um vetor com números que devem ser colocados em ordem
crescente, e a interação sucessiva de movimentos da esquerda para a direita, sempre
comparando o número selecionado com o anterior. Quando o número selecionado é
menor que o número anterior, o número selecionado é inserido na sua posição correta,
por isso o método do algoritmo de busca e ordenação chama-se inserção direta, porque
insere o número selecionado na sua posição correta.
A princípio verifica-se que o vetor contém 8 elementos desordenados, que serão
colocados em ordem crescente através de interações sucessivas do algoritmo por
inserção direta:
• 44, 55, 12, 42, 94, 18, 06, 67;
O algoritmo de ordenação por inserção direta começa percorrendo o vetor da
esquerda para a direita, comparando os valores 44, 45, e na seqüência encontrando o
valor “12”. Como o valor “12” é menor que o anterior, através do método de inserção
direta o valor “12” é colocado para o inicio do vetor na sua correta posição.
FIGURA 2 – ORDENAÇÃO POR INSERÇÃO 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 inserção direta e o valor “42” é colocado
no vetor na sua correta posição.
• 12, 42, 44, 55, 94, 18, 06, 67;
Novamente inicia-se o algoritmo de ordenação por inserção 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 inserção
direta e o valor “18” é colocado no vetor na sua correta posição.
• 12, 18, 42, 44, 55, 94, 06, 67;
A interação sucessiva continua até que o vetor esteja completamente em ordem,
a quarta interação 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 inserção direta e o valor “06” é colocado para o inicio
do vetor na sua correta posição.
• 06, 12, 18, 42, 44, 55, 94, 67;
Para completar a ordenação, novamente ocorre outra interação 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
inserção direta, e o valor “67” é colocado no vetor na sua correta posição.
• 06, 12, 18, 42, 44, 55, 67, 94;
Como é possível verificar, o algoritmo de inserção direta compara o número
selecionado com o número anterior, e caso número selecionado seja menor que o
anterior, ocorre o processo de inserção direta, colocando o número selecionado na sua
posição correta. Foram necessárias cinco interações para colocar os valores em ordem
crescente no vetor. O algoritmo por inserção 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 SELEÇÃO DIRETA
O método de ordenação por seleção direta funciona de maneira bem simples. O
algoritmo de ordenação percorre o vetor no sentido da esquerda para a direita, sempre
procurando pelo menor número que ainda não foi ordenado. Quando o algoritmo
encontra um número menor que não foi ordenado, ocorre um processo de substituição
ou troca, entre o menor número e o primeiro número que ainda não está na ordem
partindo da esquerda para a direita
Desta forma o algoritmo realiza interações sucessivas até que o vetor contenha
valores em ordem. A figura 3 apresenta o vetor que contém 8 elementos desordenados,
que serão colocados em ordem crescente através de seleções sucessivas.
FIGURA 3 – ORDENAÇÃO POR SELEÇÃO 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
número ordenado do vetor;
• 06, 55, 12, 42, 94, 18, 44, 67;
O processo se repete, e o algoritmo varre novamente o vetor, realizando nova
seleção, desta vez encontrando o valor “12”. Em seguida troca o valor “12” pelo valor
“55”, formando o segundo número 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 número
ordenado do vetor.
• 06, 12, 18, 42, 55, 94, 44, 67;
O movimento de interações continua, o algoritmo de seleção direta encontra o
menor número no vetor no momento, o valor “42”, definindo como o quarto número do
vetor, que se encontra na posição correta. Em seguida é localizado o valor “44”, que
troca de posição com o valor “55”, formando o quinto e sexto número ordenado do
vetor.
• 06, 12, 18, 42, 44, 55, 94, 67;
Faltando apenas uma interação, o algoritmo de seleção 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 seleção direta funciona sempre selecionando o menor valor que
ainda não esteja na sua ordem correta, e em seguida coloca-se o valor selecionado na
posição correta no vetor. Foram necessárias cinco interações para colocar os valores em
ordem crescente no vetor.
4.3. ALGORITMO BUBBLESORT
Este método também é conhecido como o método de ordenação por bolha. A
principal característica nesse método é a ação de permuta entre elementos do vetor. O
movimento do algoritmo de busca BubbleSort trabalha da esquerda para a direita.
Ocorre a comparação entre dois elementos de um vetor, caso o segundo valor seja
menor que o primeiro valor, acontece a troca de posição entre os valores ou também
chamada a permuta.
Desta forma o algoritmo BubbleSort realiza interações sucessivas até que o vetor
contenha valores em ordem. A figura 4 apresenta o vetor onde se verifica que contém 6
elementos desordenados que formam a palavra “ORDENA”, onde os caracteres serão
colocados em ordem crescente:
FIGURA 4 – VETOR DESORDENADO COM A PALAVRA “ORDENA”
A figura 5 apresenta todas as interações e movimentos realizados pelo algoritmo
BubbleSort para ordenar do vetor em ordem alfabética. A figura 5 está dividida em
cinco ciclos de interações conforme a numeração dos itens.
No item (1) o algoritmo inicia-se comparando os valores “O” e “R”, que se
mantém nos seus lugares porque em ordem alfabética, o valor “O” é menor que “R”.
Em seguida são comparados os valores “R” e “D”. Como o valor “R” em ordem
alfabética é maior que o valor “D”, ocorre a troca de posição entre valores, ou também
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 alfabética é maior que o valor “E”, ocorre nova permuta de posições
entre os valores.
• O, D, E, R, N, A;
Em seguida o algoritmo de ordenação compara outros dois valores o “R” e “N”.
Como o valor “R” em ordem alfabética é maior que o valor “N”, ocorre a permuta de
posições 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 alfabética é maior que o valor “A”, ocorre a permuta de posições
entre os valores.
• O, D, E, N, A, R;
FIGURA 5 – ORDENAÇÃO POR MÉTODO BUBBLESORT
Assim se encerra o primeiro ciclo de ordenação do algoritmo BubbleSort e
começa 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 posição
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 ordenação, o método BubbleSort só deve parar
quando os valores do vetor estiverem todos em ordem alfabética crescente. Observando
o item (3) da figura 5, começa o terceiro ciclo comparando o valor “D” com os demais
valores do vetor. Como o valor “D” é menor que o valor “E”, são mantidas as posições.
• D, E, N, A, O, R;
O processo continua através da comparação do valor “E” com os demais valores
do vetor. Como o valor “E” em ordem alfabética é menor que o valor “N”, são mantidas
as posições.
• 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 ordenação.
• 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”, são mantidas
as posições, e em seguida são comparados os valores “E” e “A”. Como o valor “E” em
ordem alfabética é maior que o valor “A”, ocorre a permuta de posições 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 ordenação, o quinto ciclo de
interações realiza apenas a comparação entre os valores “D” e “A”, como o valor “D”
em ordem alfabética é maior que o valor “A”, ocorre novamente à permuta de posições
entre os valores.
• A, D, E, N, O, R;
Desta maneira o algoritmo ordenação completa a ordenação do vetor. O
algoritmo de ordenação BubbleSort trabalha em ciclos de interações sucessivas
comparando valores de um vetor. Quando são comparados dois valores, e percebe-se
que o segundo valor é menor que o primeiro valor, ocorre a troca de posições entre os
valores, ou também chamada à permuta de posições entre valores em um vetor.
4.4. ALGORITMO MERGESORT
O método de ordenação MergeSort tem como sua principal característica
empregar a técnica de dividir para conquistar, desta forma o vetor é dividido por dois
sucessivamente, até encontrar a menor unidade. Quando o método de ordenação
MergeSort encontra a menor unidade, são realizadas comparações sucessivas, e a partir
das comparações o vetor é novamente montado em ordem.
A figura 6 demonstra como o método de ordenação MergeSort divide-se por
dois sucessivamente. O vetor original contém 8 elementos é dividido em dois vetores
com 4 elementos, que são 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 método de
ordenação MergeSort encontra a menor unidade, formando oito vetores de uma unidade
“n = 1”. A figura 7 apresenta o primeiro ciclo de comparações entre os vetores com
apenas uma unidade de valor “n = 1”. Os vetores são 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 – DIVISÃO DO VETOR PELO MÉTODO MERGESORT
FIGURA 7 – COMPARAÇÃO ENTRE VETORES DE TAMANHO ”N = 1”
O primeiro par de valores é comparado, caso o primeiro valor seja menor que o
segundo valor as posições são mantidas, como o valor “1” é menor que o valor “4”,
então as posições são mantidas. Porém na segunda comparação o valor “8” é maior que
o valor “3”, desta forma os valores são invertidos. Conforme se pode verificar na figura
7, ainda ocorrem à comparação entre os valores “6” e “5” que invertem posições, e a
comparação entre os valores “2” e “7” que mantém suas posições.
Após as comparações entre vetores “n = 1”, os mesmos são juntados em vetores
de tamanho “n = 2” criando um novo vetor. Encerra-se a primeiro ciclo de interações do
processo de ordenação através do método MergeSort.
Iniciando o segundo ciclo, são comparados vetores com tamanho “n = 2”. A
figura 8 apresenta dois lados (esquerdo e direito) com a comparação 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 posição de um novo vetor de tamanho “n = 4”.
Em seguida são comparados o valor “4” do primeiro vetor com o valor “3” do
segundo vetor. Como o valor “4” do primeiro vetor é maior que o valor”3” do segundo
vetor, coloca-se o valor “3” na segunda posição 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 posição do vetor
de tamanho “n = 4”, e por fim na última posição é colocado o valor “8”.
Desta maneira um novo vetor ordenado com quatro elementos é criado, o mesmo
processo ocorre no lado direito da figura, onde são comparados os valores de dois
vetores de tamanho “n = 2” criando também um novo vetor de tamanho “n = 4”.
FIGURA 8 – COMPARAÇÃO ENTRE VETORES DE TAMANHO “N = 2”
A figura 9 apresenta o terceiro e último ciclo de interações do método de
ordenação MergeSort que deve ser acompanhada a princípio de cima para abaixo no
lado esquerdo, e em seguida de cima para abaixo no lado direito com a comparação de
vetores com tamanho “n = 4”. Novamente inicia-se o processo da comparação 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 posição do novo vetor.
Em seguida ocorre a comparação 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 posição do novo vetor. Na seqüência do processo,
são 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 posição do
vetor.
Verifica-se na figura 9 que o algoritmo MergeSort trabalha em ciclos de
interações sucessivas, divide um vetor de maior tamanho em tamanhos menores, até que
encontre o menor tamanho “n = 1”, e após a divisão, remonta o vetor no seu tamanho
original ordenando os valores nele contidos. Na fase final do processo de ordenação as
comparações entre os dois vetores de tamanho “n = 4” continua até todos os valores
estejam em ordem.
FIGURA 9 – COMPARAÇÃO ENTRE VETORES DE TAMANHO “N = 4”
4.5. ALGORITMO HEAPSORT
O método de ordenação HeapSort tem como sua principal característica
empregar uma árvore binária ou heap binário. O heap binário é composto pelos valores
de um determinado vetor em formato de árvore binária. A figura 10 apresenta um vetor
com valores e uma árvore binária ou também chamada heap binário contendo os valores
do vetor. É importante observar que a ordem dos valores contida no vetor determina a
ordem dos valores no heap binário.
FIGURA 10 – VETOR E HEAP BINÁRIO
Para iniciar o algoritmo de ordenação HeapSort é necessária a montagem do
heap binário com valores armazenados no vetor. A figura 11 apresenta o vetor com
valores e forma de distribuição dos valores através do heap binário. 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 binário.
A linha azul seleciona o segundo e terceiro itens do vetor, que se encontram
posicionados na parte intermediária do heap binário. A linha lilás seleciona os quatro
últimos itens do vetor, que se encontram posicionados na base do heap binário.
FIGURA 11 – DISTRIBUIÇÃO DE VALORES NO HEAP BINÁRIO
Após a montagem do heap binário, ocorre o processo de organização
antecedendo o processo de ordenação do algoritmo. A figura 12 apresenta o processo de
organização que acontece sempre no sentido da direita para a esquerda, na primeira
linha após o topo. Desta forma o valor “2” é comparado com o valor acima e com o
valor abaixo. Na comparação com o valor acima, o valor “2” é menor que o valor “4”
então são mantidas as posições. Porém quando o valor “2” é comparado com o valor
“8”, ocorre a troca de posições, porque o valor “8” é maior que o valor “2”.
FIGURA 12 – ORGANIZANDO VALORES NO HEAP BINÁRIO
Após a troca de posições entre valores “2” e “8”, é possível observar que o vetor
que armazena os valores respectivos ao heap binário também se altera conforme as
mudanças. A seguir o processo de organização verifica o segundo número, 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 organização do heap binário e como ficou a distribuição dos valores no
vetor após as mudanças.
FIGURA 13 – ORGANIZANDO VALORES NO HEAP BINÁRIO
Após a realização do processo de organização do heap binário inicia-se o
processo de ordenação. O algoritmo de ordenação funciona no sentido da direita para a
esquerda, da camada mais profunda para as camadas superiores do heap binário, a
figura 14 apresenta o inicio do processo de ordenação.
O processo de ordenação primeiro troca o menor valor da camada mais inferior
com valor do topo do heap binário. O item 1 da figura começa apresentando a
substituição do valor “2” na base com o valor “9” no topo do heap binário. Com isso o
valor “9” é eliminado do heap binário e colocado definitivamente na última posição do
vetor sendo considerado o maior valor do vetor.
Em seguida o item 1 na figura 14, demonstra uma re-organização do heap
binário, sempre no sentido da direita para a esquerda, assim como o valor “2” é menor
que o valor “8”, os valores trocam de posições, e como valor “2” é menor que o valor
“6” ambos também trocam de posição. Em paralelo, a eliminação do valor “9” no heap
binário e as troca de posições entre valores, podem ser verificadas na disposição dos
valores no vetor.
O item 2 apresenta uma nova ação de interação no processo de ordenação, da
mesma forma que a primeira ação de interação no item 1, o processo se inicia
novamente trocando o menor valor da base com o valor do topo do heap binário. O
valor “2” troca de posição com valor “8” que em seguida é eliminado, sendo colocado
na sua posição definitiva no vetor.
Após a troca e a eliminação do valor “8”, ocorre nova re-organização do heap
binário, desta forma o valor “2” troca de posição com o valor “6” mantendo o maior
valor no topo.
FIGURA 14 – PRIMEIRO E SEGUNDO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO
A figura 15 através dos itens 1 e 2 apresenta o terceiro e quarto passos para a
ordenação do vetor através da manipulação de um heap binário. O item 1 em princípio
mostra a troca entre valores “2” na camada mais profunda e o valor “6” no topo, e em
seguida a eliminação do valor “6”, que é colocado na sua correta posição no vetor.
Ainda no item 1, são realizados procedimentos re-organização, desta maneira
como o valor “2” é menor que o valor “5”, os valores trocam de posição. O valor “2”
também é menor que o valor “4”, e ambos trocam de posição.
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 posição correta no vetor. Em seguida
inicia-se novamente o processo de re-organização, comparando os valores “2” no topo
com o valor “4”, como o valor “2” é menos que o valor “4”, ambos trocam de posição.
Ainda ocorre a comparação entre o valor “2” e o valor “1”, porém o valor “1” é menor
que o valor “2”, então as posições se mantêm.
Após as eliminações e movimentações dos valores no heap binário do terceiro e
quarto passos é possível 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 ordenação por método 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 posição no vetor. Novamente os valores são re-organizados, e como o valor “1”
no topo é menor que o valor “2”, ambos trocam de posições.
FIGURA 15 – TERCEIRO E QUARTO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO
FIGURA 16 – QUINTO E SEXTO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO
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 posição no
vetor. Restando apenas o valor “1”, o mesmo é colocado na sua correta posição no
vetor. O processo de ordenação por HeapSort se encerra apresentando todos valores em
ordem crescente no vetor.
4.6. ALGORITMO QUICKSORT
O melhor algoritmo de ordenação é o QuickSort, que foi inventado em 1962 por
C. Hoare, professor de programação na universidade Oxford. A idéia 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 estratégia, o problema para a ordenação está resolvido,
aplicado sucessivamente a mesma idéia, com os dois vetores partidos cada um deles em
mais dois vetores, formando quatro vetores, e assim sucessivamente. Para fazer a
partição que está na base do algoritmo quicksort, começa por escolher um valor
arbitrário 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 interações para
ordenar o vetor. Depois que se escolheu um pivô, o algoritmo percorre o vetor da
esquerda para direita, procurando um valor que não seja menor do que o pivô, em
paralelo, percorre-se também da direita para a esquerda, procurando um valor que não
seja maior do que o pivô.
FIGURA 18 – APLICANDO MÉTODO 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 também trocando de lado. Ainda trocam de posição os valores
“8” do lado esquerdo com o valor “4” do lado direito. Com a última troca de posições
ocorrendo entre valores com o valor “4” e o valor “2”. Após as trocas de posições 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 pivôs, 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 organização 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 são comparados os valores “3” e “2”, como o pivô nesse caso
é igual ao valor “3”, ambos valores trocam de posição, em seguida são comparados os
valores “3” e “2” que também trocam de posições. No segundo vetor o mesmo processo
se estabelece, são comparados os valores “7” e “5” que trocam de posições, e em
seguida são comparados os valores “8” e “7” que novamente, também trocam de
posições.
FIGURA 19 – APLICANDO MÉTODO QUICKSORT COM DOIS PIVÔS E QUATRO VETORES
Ao final, a figura 19 apresenta quatro vetores ordenados em ordem crescente,
quase totalizando a ordenação do vetor. Conforme verificado nas descrições anteriores,
novamente será necessário dividir os quatro vetores, para o algoritmo QuickSort
finalizar o processo de ordenação. A figura 20 apresenta a nova divisão dos vetores e a
definição de quatro pivôs, 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 seleção de quatro valores como pivô e comparação e
troca de posições entre valores do lado esquerdo com valores do lado direto.
No primeiro par de vetores, são comparados os valores “2” e “1 e como o valor
“2” é maior que o valor “1”, ambos trocam de posições. Em seguida são comparados os
valores “4” e “3” e novamente ambos também trocam de posições porque o valor “4” é
maior que o valor “3”. Entre o quinto e sexto vetor não ocorrem troca de posições entre
valores, finalizando no na última troca de valores entre o sétimo vetor e o oitavo vetor.
Ocorre a comparação entre o valor “9” e o valor “7”, trocando de posições porque o
valor “9” é maior que o valor “7”.
FIGURA 20 – APLICANDO MÉTODO QUICKSORT COM QUATRO PIVÔS E OITO VETORES
Ao final o vetor encontra-se com seus valores ordenados de forma crescente
conferindo a eficiência do funcionamento do método de ordenação QuickSort.
4.7. ALGORITMO SHELLSORT
O método de ordenação ShellSort tem como sua principal característica utilizar
um numero de incremento para auxiliar no processo de ordenação O valor inicial para
número 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 número de incremento igual
a 4.
FIGURA 21 – VETOR COM VALORES DESORDENADOS E NUMERO DE INCREMENTO
O número de incremento é empregado como referência na seleção de valores do
vetor para realizar o processo de ordenação. A figura 22 apresenta o primeiro ciclo de
interações de movimentos e troca de posições entre valores no vetor empregando o
método ShellSort.
Como o valor do número de incremento é igual a “4”, a comparação 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 posições à frente, conforme o número de
incremento. Durante a comparação se o primeiro valor for maior que o segundo valor,
ocorre a troca de posição entre ambos, caso contrário, as posições se mantém.
Na figura 21 as posições entre os valores “1” e “6”, “4” e “5”, “3” e “7” são
mantidas porque os primeiros valores são menos que os segundo valores. Porém entre
os valores “8” e “2”, os valores trocam de posições porque o valor “8” é maior que o
valor “2”.
FIGURA 21 – PRIMEIRO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT
Após o primeiro ciclo de interações do método ShellSort, pode-se observar os
valores no vetor caminhando para a ordenação. A figura 22 apresenta o segundo ciclo
de interações para realizar o processo de ordenação. A principal diferença no processo
está no valor do número de incremento, que é divido por dois. Desta maneira a seleção
de valores para comparação passa a ser após duas posições no vetor.
FIGURA 22 – SEGUNDO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT
São comparados os pares de valores “1” e “2”, “4” e “3”, “6” e “8”, “5” e “7”,
agora os valores são escolhidos com a diferença de duas posições. Os valores “1” e “2”,
“6” e “8”, “5” e “7”, mantém suas posições e os valores “4” e “3” trocam de posições
porque o valor “4” é maior que o valor “3”. A comparação e troca de posições entre
valores no segundo ciclo de iterações formam a nova posição dos valores no vetor.
A figura 23 apresenta o terceiro ciclo de interações no vetor. O valor do número
de incremento é novamente dividido por dois. As comparações entre valores no vetor
ocorrem com valores sucessivos. Os valores “4” e “2”, “6” e “5”, “8” e “7” trocam de
posições porque os primeiros valores são maiores que os segundos valores respectivos.
Em seguida o valor “4” e o valor “3” também trocam de posições finalizando a
ordenação do vetor através do método ShellSort.
FIGURA 23 – TERCEIRO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT
O método ShellSort utiliza um valor para definir o número de incremento
empregado no processo de seleção de valores. A escolha na seleção dos valores deve
respeitar o posicionamento através da distância do número de incremento. O vetor passa
por comparações sucessivas e troca de posições entre valores, compondo o processo de
ordenação.
4.8. ALGORITMO RADIXSORT
O método de ordenação RadixSort trabalha de maneira bem simples. O
algoritmo de ordenação percorre o vetor verificando os dígitos de cada valor, e
conforme verifica, divide os valores em grupos de valores entre “0” e “9” em ordem
crescente. No primeiro ciclo de interações do processo de ordenação, será verificado o
primeiro digito de cada valor da direita para a esquerda. A figura 24 apresenta o vetor
com 10 valores que serão organizados em ordem crescente.
FIGURA 24 – VETOR COM VALORES DESORDENADOS NO MÉTODO 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
interações para a ordenação dos valores no vetor, que são separados em grupos, com
dois valores com o digito de valor “0”, três 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 são colocados novamente no vetor, respeitando a
ordem crescente ao qual os grupos que foram separados.
FIGURA 25 – PRIMEIRO CICLO DE INTERAÇÕES DO MÉTODO RADIXSORT
O segundo ciclo de interações é demonstrado na figura 26, a seleção dos valores
agora verifica o segundo digito da direita para a esquerda, formando novos grupos de
valores entre “0” e “9” em ordem crescente. São separados em grupos pelo segundo
digito, um valor de digito de valor “0”, três 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 são colocados novamente no vetor, respeitando a ordem crescente ao qual
pertencem aos grupos que foram separados.
Figura 26 – Segundo ciclo de interações do método RadixSort
O último ciclo de iterações realiza novamente o procedimento de seleção de
valores divididos por grupos, porém são 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 opção como método de ordenação mantendo uma boa
eficiência ordenando grande e pequenos volumes de dados em tempo reduzido.
Figura 27 – Terceiro ciclo de interações do método RadixSort
4. A EFICIÊNCIA DE ALGORITMOS
Antes de qualquer consideração em relação à eficiência dos algoritmos, é
importante ressaltar que todos algoritmos apresentados, solucionam um dado problema
de ordenação, portanto são úteis e empregados em diversas situações. Dados dois ou
mais algoritmos para solucionar o mesmo problema, é sensato escolher aquele que
obtém uma solução no menor tempo possível e utiliza o menor espaço para
representação dos dados do problema (SWAIT, 2002).
4.1. MEDIDAS
Numa máquina seqüencial, o tempo total de execução de um algoritmo é
composto da soma de tempos de execução das operações primitivas. Em princípio, um
histograma das freqüências de execução de cada operação primitiva e uma tabela de
tempos de execução individual seria suficiente para prevermos o tempo necessário para
obter a solução de um dado problema (SWAIT, 2002).
Quando um algoritmo de ordenação deve realizar seu trabalho, pode-se dizer que
o algoritmo trabalha na solução de um dado problema. Este problema tem um
determinado grau de complexidade, e conforme a complexidade, maiores são as
dificuldades e o maior tempo para a solução do problema.
A tabela 1 apresenta as ordens de complexidade, que são um conjunto de
notações matemáticas que indicam o grau de complexidade de um determinado
algoritmo de pesquisa e ordenação. As classes enumeradas na tabelas 1 estão em ordem
de esforço crescente, desta maneira os algoritmos mais desejáveis estão no início da
lista.
constante O(1)
log log O(log log n)
logarítmica O(log n)
linear O(n)
n log n O(n log n)
quadrática O(n²)
cúbica O(n³)
exponencial O(2n)
Tabela 1 – Ordens de complexidades de algoritmos
A notação O() permite distinguir entre algoritmos com diferenças 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, porém também é necessário considerar a quantidade de
memória utilizada para realizar o processo de ordenação de um determinado algoritmo.
O volume de dados a ser ordenado pode influenciar de diversas maneiras, tanto de
forma favorável como de maneira negativa.
Por exemplo, pode-se ter uma massa grande de dados para ordenar, porém os
mesmos já estão 50% organizados, porque são 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 número de troca de posições entre os
dados para efetivar uma ordenação.
Outra possibilidade é que um algoritmo normalmente é codificado em uma
determinada linguagem de programação, para ser executado em um computador. As
linguagens de programação funcionam de diferentes maneiras podendo também afetar
no desempenho, e na eficiência da execução do algoritmo de ordenação.
A tabela 2 apresenta os algoritmos, distribuídos quando estão no processo de
ordenação no melhor, pior e na média dos casos. O RadixSort aparece como uma boa
opção em todos os casos. O método de inserção, selecão e ShellSort aparecem como
uma boa opção nos seus melhores casos. Ficando os piores casos a princípio para o
HeapSort, MergeSort e QuickSort, porém são de fácil implementação e manutenção
através de códigos o que justifica também sua escolha como opção. Desta maneira a
melhor conclusão na escolha de um algoritmo de ordenação está em considerar as
condições, como o volume de dados, a ordem dos dados, a linguagem de programação
escolhida para implementar o algoritmo, o computador e quantidade de memória
empregados no processo de ordenação.
Caso Médio Melhor Caso Pior Caso
RadixSort O(n) O(n) O(n)
MergeSort O(n log n) O(n log n) O(n log n)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n1,5
) O(n) O(n1,5
)
Inserção O(n²) O(n) O(n²)
Seleção O(n²) O(n²) O(n²)
HeapSort O(n log n) O(n log n) O(n²)
BubbleSort O(n²) O(n log n) O(n²)
Tabela 2 – Médio, melhor e pior casos dos algoritmos de ordenação
REFERÊNCIAS
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, São Paulo, 2002.
Wirth, N. Algortimos e Estrutura de Dados. editora LTC, Rio de Janeiro, 1999.

Mais conteúdo relacionado

Semelhante a 170557670 pesquisa-e-ordenacao

Conceitos estatistica
Conceitos estatisticaConceitos estatistica
Conceitos estatistica
Juliana Ardel
 
Dado e informação
Dado e informaçãoDado e informação
Dado e informação
dgtavares
 
Dado e informação
Dado e informaçãoDado e informação
Dado e informação
cabaldreams
 
Introdução.ti.aula.01
Introdução.ti.aula.01Introdução.ti.aula.01
Introdução.ti.aula.01
edgleysonalves
 
Análise de Comportamento e Desempenho de Algoritmos de Ordenação
Análise de Comportamento e Desempenho de Algoritmos de OrdenaçãoAnálise de Comportamento e Desempenho de Algoritmos de Ordenação
Análise de Comportamento e Desempenho de Algoritmos de Ordenação
Bruno Mourao Siqueira
 
Apostila de postgre
Apostila de postgreApostila de postgre
Apostila de postgre
ms6675
 
Ricardo Mendes de Freitas - Modelagem Matemática em Ecologia de Populações
Ricardo Mendes de Freitas - Modelagem Matemática em Ecologia de PopulaçõesRicardo Mendes de Freitas - Modelagem Matemática em Ecologia de Populações
Ricardo Mendes de Freitas - Modelagem Matemática em Ecologia de Populações
Rodolfo Almeida
 

Semelhante a 170557670 pesquisa-e-ordenacao (20)

Conceitos estatistica
Conceitos estatisticaConceitos estatistica
Conceitos estatistica
 
Dado e informação
Dado e informaçãoDado e informação
Dado e informação
 
Dado e informação
Dado e informaçãoDado e informação
Dado e informação
 
Estrutra de dados java muito bom
Estrutra de dados java muito bomEstrutra de dados java muito bom
Estrutra de dados java muito bom
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Data mining: Auxiliando as empresas na tomada de decisão
Data mining: Auxiliando as empresas na tomada de decisãoData mining: Auxiliando as empresas na tomada de decisão
Data mining: Auxiliando as empresas na tomada de decisão
 
Estruturas dados
Estruturas dadosEstruturas dados
Estruturas dados
 
Estruturas dados
Estruturas dadosEstruturas dados
Estruturas dados
 
sistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdfsistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdf
 
01 aula s. i.
01   aula s. i.01   aula s. i.
01 aula s. i.
 
Caderno de info(banco de dados).
Caderno de info(banco de dados).Caderno de info(banco de dados).
Caderno de info(banco de dados).
 
Avaliação NOSQL para indexação do Twitter
Avaliação NOSQL para indexação do TwitterAvaliação NOSQL para indexação do Twitter
Avaliação NOSQL para indexação do Twitter
 
Introdução.ti.aula.01
Introdução.ti.aula.01Introdução.ti.aula.01
Introdução.ti.aula.01
 
Análise de Comportamento e Desempenho de Algoritmos de Ordenação
Análise de Comportamento e Desempenho de Algoritmos de OrdenaçãoAnálise de Comportamento e Desempenho de Algoritmos de Ordenação
Análise de Comportamento e Desempenho de Algoritmos de Ordenação
 
Analise e Projeto de Sistemas
Analise e Projeto de SistemasAnalise e Projeto de Sistemas
Analise e Projeto de Sistemas
 
ID3 Algorithm
ID3 AlgorithmID3 Algorithm
ID3 Algorithm
 
Apostila de postgre
Apostila de postgreApostila de postgre
Apostila de postgre
 
Tcc aop-e-persistencia
Tcc aop-e-persistenciaTcc aop-e-persistencia
Tcc aop-e-persistencia
 
Armazenamento, Indexação e Recuperação de Informação
Armazenamento, Indexação e Recuperação de InformaçãoArmazenamento, Indexação e Recuperação de Informação
Armazenamento, Indexação e Recuperação de Informação
 
Ricardo Mendes de Freitas - Modelagem Matemática em Ecologia de Populações
Ricardo Mendes de Freitas - Modelagem Matemática em Ecologia de PopulaçõesRicardo Mendes de Freitas - Modelagem Matemática em Ecologia de Populações
Ricardo Mendes de Freitas - Modelagem Matemática em Ecologia de Populações
 

Mais de Ademar Trindade

Mais de Ademar Trindade (20)

pesquisa-mercadolc3b3gica-aula-2-2017.ppt
pesquisa-mercadolc3b3gica-aula-2-2017.pptpesquisa-mercadolc3b3gica-aula-2-2017.ppt
pesquisa-mercadolc3b3gica-aula-2-2017.ppt
 
pesquisacientifica.ppt
pesquisacientifica.pptpesquisacientifica.ppt
pesquisacientifica.ppt
 
aula-091.ppt
aula-091.pptaula-091.ppt
aula-091.ppt
 
va_Arte_Pesquisar_II_Estratégia_busca_fontes_informação_2019.ppt
va_Arte_Pesquisar_II_Estratégia_busca_fontes_informação_2019.pptva_Arte_Pesquisar_II_Estratégia_busca_fontes_informação_2019.ppt
va_Arte_Pesquisar_II_Estratégia_busca_fontes_informação_2019.ppt
 
AULA_ORIENTATIVO_TCC.pptx
AULA_ORIENTATIVO_TCC.pptxAULA_ORIENTATIVO_TCC.pptx
AULA_ORIENTATIVO_TCC.pptx
 
AULA_INTRODUÇÃO_PARTE_1.pptx
AULA_INTRODUÇÃO_PARTE_1.pptxAULA_INTRODUÇÃO_PARTE_1.pptx
AULA_INTRODUÇÃO_PARTE_1.pptx
 
AULA_INTRODUÇÃO_PARTE_0.pptx
AULA_INTRODUÇÃO_PARTE_0.pptxAULA_INTRODUÇÃO_PARTE_0.pptx
AULA_INTRODUÇÃO_PARTE_0.pptx
 
TCC Tiago Barreto de Lima.pdf
TCC Tiago Barreto de Lima.pdfTCC Tiago Barreto de Lima.pdf
TCC Tiago Barreto de Lima.pdf
 
Simulando infraestruturas-computacionais-para-a-ubicomp
Simulando infraestruturas-computacionais-para-a-ubicompSimulando infraestruturas-computacionais-para-a-ubicomp
Simulando infraestruturas-computacionais-para-a-ubicomp
 
Isa madapt tese
Isa madapt teseIsa madapt tese
Isa madapt tese
 
Internet das-coisas
Internet das-coisasInternet das-coisas
Internet das-coisas
 
Artigo ihc1
Artigo ihc1Artigo ihc1
Artigo ihc1
 
63924715 xxi-simposio-brasileiro-de-redes-de-computadores
63924715 xxi-simposio-brasileiro-de-redes-de-computadores63924715 xxi-simposio-brasileiro-de-redes-de-computadores
63924715 xxi-simposio-brasileiro-de-redes-de-computadores
 
4452
44524452
4452
 
2007 alexandre rodriguesgomes
2007 alexandre rodriguesgomes2007 alexandre rodriguesgomes
2007 alexandre rodriguesgomes
 
926 4624-1-pb
926 4624-1-pb926 4624-1-pb
926 4624-1-pb
 
45
4545
45
 
7082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-201809037082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-20180903
 
00011
0001100011
00011
 
08 ordenacao
08 ordenacao08 ordenacao
08 ordenacao
 

170557670 pesquisa-e-ordenacao

  • 1. Pesquisa e Ordenação Sistemas de Informação Domingos Bernardo Gomes Santos
  • 2. Domingos Bernardo Gomes Santos PESQUISA E ORDENAÇÃO SISTEMAS DE INFORMAÇÕES Educação a Distância
  • 3. SUMÁRIO 1. INTRODUÇÃO........................................................................................................ 5 2. VETORES ................................................................................................................ 6 3. ALGORITMOS DE PESQUISA E ORDENAÇÃO................................................ 7 4.1. ALGORITMO POR INSERÇÃO DIRETA......................................................... 7 4.2. ALGORITMO POR SELEÇÃO DIRETA........................................................... 9 4.3. ALGORITMO BUBBLESORT ......................................................................... 10 4.4. ALGORITMO MERGESORT........................................................................... 13 4.5. ALGORITMO HEAPSORT .............................................................................. 16 4.6. ALGORITMO QUICKSORT ............................................................................ 21 4.7. ALGORITMO SHELLSORT ............................................................................ 23 4.8. ALGORITMO RADIXSORT ............................................................................ 25 4. A EFICIÊNCIA DE ALGORITMOS .................................................................... 27 4.1. MEDIDAS.......................................................................................................... 27 REFERÊNCIAS .................................................................................................... 30
  • 4. ÍNDICE DE FIGURAS FIGURA 1 – VETOR OU ARRAY UNIDIMENSIONAL E MATRIZ MULTIDIMENSIONAL ................. 6 FIGURA 2 – ORDENAÇÃO POR INSERÇÃO DIRETA .................................................................. 8 FIGURA 3 – ORDENAÇÃO POR SELEÇÃO DIRETA ................................................................... 9 FIGURA 4 – VETOR DESORDENADO COM A PALAVRA “ORDENA”...................................... 10 FIGURA 5 – ORDENAÇÃO POR MÉTODO BUBBLESORT......................................................... 11 FIGURA 6 – DIVISÃO DO VETOR PELO MÉTODO MERGESORT .............................................. 13 FIGURA 7 – COMPARAÇÃO ENTRE VETORES DE TAMANHO ”N = 1” ..................................... 14 FIGURA 8 – COMPARAÇÃO ENTRE VETORES DE TAMANHO “N = 2” ..................................... 15 FIGURA 9 – COMPARAÇÃO ENTRE VETORES DE TAMANHO “N = 4” ..................................... 16 FIGURA 10 – VETOR E HEAP BINÁRIO................................................................................ 16 FIGURA 11 – DISTRIBUIÇÃO DE VALORES NO HEAP BINÁRIO .............................................. 17 FIGURA 12 – ORGANIZANDO VALORES NO HEAP BINÁRIO................................................... 17 FIGURA 13 – ORGANIZANDO VALORES NO HEAP BINÁRIO................................................... 18 FIGURA 14 – PRIMEIRO E SEGUNDO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO.................. 19 FIGURA 15 – TERCEIRO E QUARTO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO.................... 20 FIGURA 16 – QUINTO E SEXTO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO.......................... 20 FIGURA 17 – VETOR COM VALORES DESORDENADOS E O PIVÔ ............................................ 21 FIGURA 18 – APLICANDO MÉTODO QUICKSORT COM UM PIVÔ E DOIS VETORES .................. 21 FIGURA 19 – APLICANDO MÉTODO QUICKSORT COM DOIS PIVÔS E QUATRO VETORES ......... 22 FIGURA 20 – APLICANDO MÉTODO QUICKSORT COM QUATRO PIVÔS E OITO VETORES......... 23 FIGURA 21 – VETOR COM VALORES DESORDENADOS E NUMERO DE INCREMENTO................ 23 FIGURA 21 – PRIMEIRO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT ............................ 24 FIGURA 22 – SEGUNDO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT ............................ 24 FIGURA 23 – TERCEIRO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT ............................ 25 FIGURA 24 – VETOR COM VALORES DESORDENADOS NO MÉTODO RADIXSORT..................... 25 FIGURA 25 – PRIMEIRO CICLO DE INTERAÇÕES DO MÉTODO RADIXSORT ............................ 26
  • 5. ÍNDICE DE TABELAS TABELA 1 – ORDENS DE COMPLEXIDADES DE ALGORITMOS ...................................................28 TABELA 2 – MÉDIO, MELHOR E PIOR CASOS DOS ALGORITMOS DE ORDENAÇÃO..............29
  • 6. 1. INTRODUÇÃO A pesquisa e a ordenação aparecem como tema de constante discussão e como foco de estudo de diversos pesquisadores. Atualmente a discussão está concentrada na necessidade encontrada por sites de busca na internet, em conseguir realizar buscas precisas e eficientes por informações. Ocorre ainda uma corrida tecnológica entre os sites de busca por conseguir o melhor algoritmo de pesquisa, e com isso tornar-se à referência, quando a necessidade na internet visa a busca pela informação. Nesse contexto podem-se observar diversas literaturas ao longo do tempo, com publicações sobre conceitos, definições e a necessidade em empregar métodos para a pesquisa e a ordenação de dados: No volume 3 da célebre série “A arte de programar computadores” escrita por (Knuth, 1973), onde ele diz “acredito que quase todo aspecto importante da programação ocorra como uma faceta de ordenação ou pesquisa”. Colocar um conjunto de dados em ordem (crescente ou decrescente) é uma operação constantemente exigida, pois facilita muitas outras operações subseqüentes, tais como a pesquisa por um dado específico (Swait, 2002). Em geral, entende-se a atividade de ordenação como sendo o processo de rearranjo de um certo conjunto de objetos de acordo com um critério (ordem) específico. O objetivo da ordenação é facilitar a localização dos membros de um conjunto de dados. Assim sendo, é uma atividade fundamental e universalmente utilizada para a elaboração de algoritmos mais complexos. Exemplos de casos em que os objetos são ordenados podem ser encontrados em listas telefônicas, impostos de renda, índices, bibliotecas, dicionários, almoxarifados, etc... (Wirth, 1999). Outro aspecto de relevância que deve ser considerando na busca da informação de forma precisa, credita-se às bases de dados, não sendo apenas consideradas com repositório de dados. Um repositório de dados apenas armazena informações sem mecanismos de busca e procura por informações. Para acrescentar ordem aos bancos de dados, foram criados diversos algoritmos de pesquisa e ordenação. Os algoritmos de pesquisa ou ordenação nos permitem que encontremos um determinado dado no meio de um milhão de dados. Entre os mais importantes podemos citar BubbleSort com a ordenação por flutuação, HeapSort com a ordenação por heap, InsertionSort com a ordenação por inserção e o QuickSort com um método de ordenação rápido. Na área gerencial ou de tomada de decisões em grandes organizações, os bancos de dados exercem diversas funções. Através de algoritmos de ordenação empregados para ordenar os dados, pode-se ter respostas às perguntas do tipo, "quais os produtos mais vendidos esse ano?" ou "quais são os funcionários que tem maior salário?". Um algoritmo constitui-se de um conjunto de procedimentos realizados em uma determinada ordem que coloque em ordem um conjunto de dados em diversas situações.
  • 7. Mas, por mais rápidos que sejam os computadores de hoje, o processo de pesquisa e ordenação costuma ser bastante demorado. Para isso, os métodos de pesquisa e ordenação demonstram formas de aperfeiçoar esses processos, fazendo o maior número de operações com um mínimo de esforço possível do microprocessador. Em caráter didático, para facilitar o estudo e o entendimento dos algoritmos de pesquisa e ordenação na apostila, as informações serão colocadas em vetores e em seguida ordenadas através de algoritmos. Para organizar ou pesquisar por uma informação, é necessário que esta informação esteja armazenada em algum lugar. Um vetor pode ser considerado um lugar ou local para armazenamento de um conjunto de informações. 2. VETORES Os vetores são, provavelmente, as estruturas de dados mais conhecidas; e talvez mesmo, a única disponível em algumas linguagens de programação. Um vetor consiste de componentes homogêneos, ou seja, do mesmo tipo, chamado tipo base. Assim, um vetor pode ser classificado como uma estrutura homogênea (Wirth, 1999). Um vetor em uma linguagem de programação pode ser chamado de array quando for unidimensional, e matriz para quando bidimensionais. Os arrays mantêm uma série de elementos de dados do mesmo tipo de dados e tamanho fixo. Elementos individuais são acessados por sua posição em linha no array. A posição é dada por um índice. O índice geralmente utiliza uma seqüência de números inteiros. Alguns arrays são multidimensionais, contendo linhas e colunas. A figura 1 apresenta um vetor ou também chamado array unidimensional, e uma matriz multidimensional. Os arrays podem-se considerar como as estruturas de dado mais simples que é possível imaginar e têm a vantagem de que os seus elementos são acessíveis de forma rápida. FIGURA 1 – VETOR OU ARRAY UNIDIMENSIONAL E MATRIZ MULTIDIMENSIONAL
  • 8. 3. ALGORITMOS DE PESQUISA E ORDENAÇÃO O termo algoritmo vem da palavra árabe alkharizmi, originária do nome de um matemático persa chamado Abu Ja’far Mohammed Ibn Musa al Khowarizmi, autor de um livro-Texto sobre matemática no século IX (Knuth, 1973). Em português, a palavra quer dizer “operação ou processo de cálculo”. De maneira geral, o termo algoritmo evoca a noção de um “processo para resolver um dado problema”. O algoritmo não é a solução do problema mais sim a forma de obtê-la. Com o uso de computadores como ferramentas, e através de métodos previamente conhecidos, é possível buscar soluções para problemas matemáticos. Dentro deste conceito, um algoritmo é uma seqüência ordenada finita de operações 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 período de tempo, produzindo solução ou indicando que a solução não pode ser obtida (Swait, 2002). Desta forma serão apresentados métodos de ordenação ou algoritmos de ordenação que tem como princípio e objetivo colocar em ordem valores inseridos em vetores. Os valores podem ser números ou letras do alfabeto, e a ordem dos valores pode ser crescente ou decrescente. 4.1. ALGORITMO POR INSERÇÃO DIRETA Este método é muito utilizado por jogadores de cartas. São entregues os elementos (cartas) aos jogadores. Os jogadores verificam as cartas, e através de movimentos sucessivos deslocando e inserindo os elementos, colocam suas cartas em uma ordem adequada. O mesmo ocorre como o método de ordenação por inserção direta. Através de movimentos sucessivos, o método de ordenação agrupa elementos em uma determinada ordem. A figura 2 apresenta um vetor com números que devem ser colocados em ordem crescente, e a interação sucessiva de movimentos da esquerda para a direita, sempre comparando o número selecionado com o anterior. Quando o número selecionado é menor que o número anterior, o número selecionado é inserido na sua posição correta, por isso o método do algoritmo de busca e ordenação chama-se inserção direta, porque insere o número selecionado na sua posição correta. A princípio verifica-se que o vetor contém 8 elementos desordenados, que serão colocados em ordem crescente através de interações sucessivas do algoritmo por inserção direta: • 44, 55, 12, 42, 94, 18, 06, 67; O algoritmo de ordenação por inserção direta começa percorrendo o vetor da esquerda para a direita, comparando os valores 44, 45, e na seqüência encontrando o valor “12”. Como o valor “12” é menor que o anterior, através do método de inserção direta o valor “12” é colocado para o inicio do vetor na sua correta posição.
  • 9. FIGURA 2 – ORDENAÇÃO POR INSERÇÃO 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 inserção direta e o valor “42” é colocado no vetor na sua correta posição. • 12, 42, 44, 55, 94, 18, 06, 67; Novamente inicia-se o algoritmo de ordenação por inserção 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 inserção direta e o valor “18” é colocado no vetor na sua correta posição. • 12, 18, 42, 44, 55, 94, 06, 67; A interação sucessiva continua até que o vetor esteja completamente em ordem, a quarta interação 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 inserção direta e o valor “06” é colocado para o inicio do vetor na sua correta posição. • 06, 12, 18, 42, 44, 55, 94, 67; Para completar a ordenação, novamente ocorre outra interação 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 inserção direta, e o valor “67” é colocado no vetor na sua correta posição. • 06, 12, 18, 42, 44, 55, 67, 94; Como é possível verificar, o algoritmo de inserção direta compara o número selecionado com o número anterior, e caso número selecionado seja menor que o anterior, ocorre o processo de inserção direta, colocando o número selecionado na sua posição correta. Foram necessárias cinco interações para colocar os valores em ordem
  • 10. crescente no vetor. O algoritmo por inserção 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 SELEÇÃO DIRETA O método de ordenação por seleção direta funciona de maneira bem simples. O algoritmo de ordenação percorre o vetor no sentido da esquerda para a direita, sempre procurando pelo menor número que ainda não foi ordenado. Quando o algoritmo encontra um número menor que não foi ordenado, ocorre um processo de substituição ou troca, entre o menor número e o primeiro número que ainda não está na ordem partindo da esquerda para a direita Desta forma o algoritmo realiza interações sucessivas até que o vetor contenha valores em ordem. A figura 3 apresenta o vetor que contém 8 elementos desordenados, que serão colocados em ordem crescente através de seleções sucessivas. FIGURA 3 – ORDENAÇÃO POR SELEÇÃO 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 número ordenado do vetor; • 06, 55, 12, 42, 94, 18, 44, 67; O processo se repete, e o algoritmo varre novamente o vetor, realizando nova seleção, desta vez encontrando o valor “12”. Em seguida troca o valor “12” pelo valor “55”, formando o segundo número ordenado do vetor. • 06, 12, 55, 42, 94, 18, 44, 67;
  • 11. 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 número ordenado do vetor. • 06, 12, 18, 42, 55, 94, 44, 67; O movimento de interações continua, o algoritmo de seleção direta encontra o menor número no vetor no momento, o valor “42”, definindo como o quarto número do vetor, que se encontra na posição correta. Em seguida é localizado o valor “44”, que troca de posição com o valor “55”, formando o quinto e sexto número ordenado do vetor. • 06, 12, 18, 42, 44, 55, 94, 67; Faltando apenas uma interação, o algoritmo de seleção 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 seleção direta funciona sempre selecionando o menor valor que ainda não esteja na sua ordem correta, e em seguida coloca-se o valor selecionado na posição correta no vetor. Foram necessárias cinco interações para colocar os valores em ordem crescente no vetor. 4.3. ALGORITMO BUBBLESORT Este método também é conhecido como o método de ordenação por bolha. A principal característica nesse método é a ação de permuta entre elementos do vetor. O movimento do algoritmo de busca BubbleSort trabalha da esquerda para a direita. Ocorre a comparação entre dois elementos de um vetor, caso o segundo valor seja menor que o primeiro valor, acontece a troca de posição entre os valores ou também chamada a permuta. Desta forma o algoritmo BubbleSort realiza interações sucessivas até que o vetor contenha valores em ordem. A figura 4 apresenta o vetor onde se verifica que contém 6 elementos desordenados que formam a palavra “ORDENA”, onde os caracteres serão colocados em ordem crescente: FIGURA 4 – VETOR DESORDENADO COM A PALAVRA “ORDENA” A figura 5 apresenta todas as interações e movimentos realizados pelo algoritmo BubbleSort para ordenar do vetor em ordem alfabética. A figura 5 está dividida em cinco ciclos de interações conforme a numeração dos itens. No item (1) o algoritmo inicia-se comparando os valores “O” e “R”, que se mantém nos seus lugares porque em ordem alfabética, o valor “O” é menor que “R”. Em seguida são comparados os valores “R” e “D”. Como o valor “R” em ordem
  • 12. alfabética é maior que o valor “D”, ocorre a troca de posição entre valores, ou também 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 alfabética é maior que o valor “E”, ocorre nova permuta de posições entre os valores. • O, D, E, R, N, A; Em seguida o algoritmo de ordenação compara outros dois valores o “R” e “N”. Como o valor “R” em ordem alfabética é maior que o valor “N”, ocorre a permuta de posições 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 alfabética é maior que o valor “A”, ocorre a permuta de posições entre os valores. • O, D, E, N, A, R; FIGURA 5 – ORDENAÇÃO POR MÉTODO BUBBLESORT Assim se encerra o primeiro ciclo de ordenação do algoritmo BubbleSort e começa o segundo ciclo no item (2) da figura 5, o processo inicia-se novamente,
  • 13. comparando o valor “O” com os demais valores do vetor, até que encontre sua posição 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 ordenação, o método BubbleSort só deve parar quando os valores do vetor estiverem todos em ordem alfabética crescente. Observando o item (3) da figura 5, começa o terceiro ciclo comparando o valor “D” com os demais valores do vetor. Como o valor “D” é menor que o valor “E”, são mantidas as posições. • D, E, N, A, O, R; O processo continua através da comparação do valor “E” com os demais valores do vetor. Como o valor “E” em ordem alfabética é menor que o valor “N”, são mantidas as posições. • 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 ordenação. • 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”, são mantidas as posições, e em seguida são comparados os valores “E” e “A”. Como o valor “E” em ordem alfabética é maior que o valor “A”, ocorre a permuta de posições 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 ordenação, o quinto ciclo de interações realiza apenas a comparação entre os valores “D” e “A”, como o valor “D” em ordem alfabética é maior que o valor “A”, ocorre novamente à permuta de posições entre os valores. • A, D, E, N, O, R; Desta maneira o algoritmo ordenação completa a ordenação do vetor. O algoritmo de ordenação BubbleSort trabalha em ciclos de interações sucessivas comparando valores de um vetor. Quando são comparados dois valores, e percebe-se que o segundo valor é menor que o primeiro valor, ocorre a troca de posições entre os valores, ou também chamada à permuta de posições entre valores em um vetor.
  • 14. 4.4. ALGORITMO MERGESORT O método de ordenação MergeSort tem como sua principal característica empregar a técnica de dividir para conquistar, desta forma o vetor é dividido por dois sucessivamente, até encontrar a menor unidade. Quando o método de ordenação MergeSort encontra a menor unidade, são realizadas comparações sucessivas, e a partir das comparações o vetor é novamente montado em ordem. A figura 6 demonstra como o método de ordenação MergeSort divide-se por dois sucessivamente. O vetor original contém 8 elementos é dividido em dois vetores com 4 elementos, que são 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 método de ordenação MergeSort encontra a menor unidade, formando oito vetores de uma unidade “n = 1”. A figura 7 apresenta o primeiro ciclo de comparações entre os vetores com apenas uma unidade de valor “n = 1”. Os vetores são 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 – DIVISÃO DO VETOR PELO MÉTODO MERGESORT
  • 15. FIGURA 7 – COMPARAÇÃO ENTRE VETORES DE TAMANHO ”N = 1” O primeiro par de valores é comparado, caso o primeiro valor seja menor que o segundo valor as posições são mantidas, como o valor “1” é menor que o valor “4”, então as posições são mantidas. Porém na segunda comparação o valor “8” é maior que o valor “3”, desta forma os valores são invertidos. Conforme se pode verificar na figura 7, ainda ocorrem à comparação entre os valores “6” e “5” que invertem posições, e a comparação entre os valores “2” e “7” que mantém suas posições. Após as comparações entre vetores “n = 1”, os mesmos são juntados em vetores de tamanho “n = 2” criando um novo vetor. Encerra-se a primeiro ciclo de interações do processo de ordenação através do método MergeSort. Iniciando o segundo ciclo, são comparados vetores com tamanho “n = 2”. A figura 8 apresenta dois lados (esquerdo e direito) com a comparação 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 posição de um novo vetor de tamanho “n = 4”. Em seguida são comparados o valor “4” do primeiro vetor com o valor “3” do segundo vetor. Como o valor “4” do primeiro vetor é maior que o valor”3” do segundo vetor, coloca-se o valor “3” na segunda posição 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 posição do vetor de tamanho “n = 4”, e por fim na última posição é colocado o valor “8”. Desta maneira um novo vetor ordenado com quatro elementos é criado, o mesmo processo ocorre no lado direito da figura, onde são comparados os valores de dois vetores de tamanho “n = 2” criando também um novo vetor de tamanho “n = 4”.
  • 16. FIGURA 8 – COMPARAÇÃO ENTRE VETORES DE TAMANHO “N = 2” A figura 9 apresenta o terceiro e último ciclo de interações do método de ordenação MergeSort que deve ser acompanhada a princípio de cima para abaixo no lado esquerdo, e em seguida de cima para abaixo no lado direito com a comparação de vetores com tamanho “n = 4”. Novamente inicia-se o processo da comparação 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 posição do novo vetor. Em seguida ocorre a comparação 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 posição do novo vetor. Na seqüência do processo, são 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 posição do vetor. Verifica-se na figura 9 que o algoritmo MergeSort trabalha em ciclos de interações sucessivas, divide um vetor de maior tamanho em tamanhos menores, até que encontre o menor tamanho “n = 1”, e após a divisão, remonta o vetor no seu tamanho original ordenando os valores nele contidos. Na fase final do processo de ordenação as comparações entre os dois vetores de tamanho “n = 4” continua até todos os valores estejam em ordem.
  • 17. FIGURA 9 – COMPARAÇÃO ENTRE VETORES DE TAMANHO “N = 4” 4.5. ALGORITMO HEAPSORT O método de ordenação HeapSort tem como sua principal característica empregar uma árvore binária ou heap binário. O heap binário é composto pelos valores de um determinado vetor em formato de árvore binária. A figura 10 apresenta um vetor com valores e uma árvore binária ou também chamada heap binário contendo os valores do vetor. É importante observar que a ordem dos valores contida no vetor determina a ordem dos valores no heap binário. FIGURA 10 – VETOR E HEAP BINÁRIO Para iniciar o algoritmo de ordenação HeapSort é necessária a montagem do heap binário com valores armazenados no vetor. A figura 11 apresenta o vetor com valores e forma de distribuição dos valores através do heap binário. A linha vermelha
  • 18. aponta para o primeiro item do vetor, com valor “4”, que por ser o primeiro item encontra-se no topo do heap binário. A linha azul seleciona o segundo e terceiro itens do vetor, que se encontram posicionados na parte intermediária do heap binário. A linha lilás seleciona os quatro últimos itens do vetor, que se encontram posicionados na base do heap binário. FIGURA 11 – DISTRIBUIÇÃO DE VALORES NO HEAP BINÁRIO Após a montagem do heap binário, ocorre o processo de organização antecedendo o processo de ordenação do algoritmo. A figura 12 apresenta o processo de organização que acontece sempre no sentido da direita para a esquerda, na primeira linha após o topo. Desta forma o valor “2” é comparado com o valor acima e com o valor abaixo. Na comparação com o valor acima, o valor “2” é menor que o valor “4” então são mantidas as posições. Porém quando o valor “2” é comparado com o valor “8”, ocorre a troca de posições, porque o valor “8” é maior que o valor “2”. FIGURA 12 – ORGANIZANDO VALORES NO HEAP BINÁRIO Após a troca de posições entre valores “2” e “8”, é possível observar que o vetor que armazena os valores respectivos ao heap binário também se altera conforme as
  • 19. mudanças. A seguir o processo de organização verifica o segundo número, 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 organização do heap binário e como ficou a distribuição dos valores no vetor após as mudanças. FIGURA 13 – ORGANIZANDO VALORES NO HEAP BINÁRIO Após a realização do processo de organização do heap binário inicia-se o processo de ordenação. O algoritmo de ordenação funciona no sentido da direita para a esquerda, da camada mais profunda para as camadas superiores do heap binário, a figura 14 apresenta o inicio do processo de ordenação. O processo de ordenação primeiro troca o menor valor da camada mais inferior com valor do topo do heap binário. O item 1 da figura começa apresentando a substituição do valor “2” na base com o valor “9” no topo do heap binário. Com isso o valor “9” é eliminado do heap binário e colocado definitivamente na última posição do vetor sendo considerado o maior valor do vetor. Em seguida o item 1 na figura 14, demonstra uma re-organização do heap binário, sempre no sentido da direita para a esquerda, assim como o valor “2” é menor que o valor “8”, os valores trocam de posições, e como valor “2” é menor que o valor “6” ambos também trocam de posição. Em paralelo, a eliminação do valor “9” no heap binário e as troca de posições entre valores, podem ser verificadas na disposição dos valores no vetor. O item 2 apresenta uma nova ação de interação no processo de ordenação, da mesma forma que a primeira ação de interação no item 1, o processo se inicia
  • 20. novamente trocando o menor valor da base com o valor do topo do heap binário. O valor “2” troca de posição com valor “8” que em seguida é eliminado, sendo colocado na sua posição definitiva no vetor. Após a troca e a eliminação do valor “8”, ocorre nova re-organização do heap binário, desta forma o valor “2” troca de posição com o valor “6” mantendo o maior valor no topo. FIGURA 14 – PRIMEIRO E SEGUNDO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO A figura 15 através dos itens 1 e 2 apresenta o terceiro e quarto passos para a ordenação do vetor através da manipulação de um heap binário. O item 1 em princípio mostra a troca entre valores “2” na camada mais profunda e o valor “6” no topo, e em seguida a eliminação do valor “6”, que é colocado na sua correta posição no vetor. Ainda no item 1, são realizados procedimentos re-organização, desta maneira como o valor “2” é menor que o valor “5”, os valores trocam de posição. O valor “2” também é menor que o valor “4”, e ambos trocam de posição. 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 posição correta no vetor. Em seguida inicia-se novamente o processo de re-organização, comparando os valores “2” no topo com o valor “4”, como o valor “2” é menos que o valor “4”, ambos trocam de posição. Ainda ocorre a comparação entre o valor “2” e o valor “1”, porém o valor “1” é menor que o valor “2”, então as posições se mantêm. Após as eliminações e movimentações dos valores no heap binário do terceiro e quarto passos é possível 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 ordenação por método HeapSort.
  • 21. 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 posição no vetor. Novamente os valores são re-organizados, e como o valor “1” no topo é menor que o valor “2”, ambos trocam de posições. FIGURA 15 – TERCEIRO E QUARTO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO FIGURA 16 – QUINTO E SEXTO PASSOS DE ORDENAÇÃO NO HEAP BINÁRIO 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 posição no vetor. Restando apenas o valor “1”, o mesmo é colocado na sua correta posição no vetor. O processo de ordenação por HeapSort se encerra apresentando todos valores em ordem crescente no vetor.
  • 22. 4.6. ALGORITMO QUICKSORT O melhor algoritmo de ordenação é o QuickSort, que foi inventado em 1962 por C. Hoare, professor de programação na universidade Oxford. A idéia 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 estratégia, o problema para a ordenação está resolvido, aplicado sucessivamente a mesma idéia, com os dois vetores partidos cada um deles em mais dois vetores, formando quatro vetores, e assim sucessivamente. Para fazer a partição que está na base do algoritmo quicksort, começa por escolher um valor arbitrário 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 interações para ordenar o vetor. Depois que se escolheu um pivô, o algoritmo percorre o vetor da esquerda para direita, procurando um valor que não seja menor do que o pivô, em paralelo, percorre-se também da direita para a esquerda, procurando um valor que não seja maior do que o pivô. FIGURA 18 – APLICANDO MÉTODO QUICKSORT COM UM PIVÔ E DOIS VETORES
  • 23. 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 também trocando de lado. Ainda trocam de posição os valores “8” do lado esquerdo com o valor “4” do lado direito. Com a última troca de posições ocorrendo entre valores com o valor “4” e o valor “2”. Após as trocas de posições 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 pivôs, 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 organização 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 são comparados os valores “3” e “2”, como o pivô nesse caso é igual ao valor “3”, ambos valores trocam de posição, em seguida são comparados os valores “3” e “2” que também trocam de posições. No segundo vetor o mesmo processo se estabelece, são comparados os valores “7” e “5” que trocam de posições, e em seguida são comparados os valores “8” e “7” que novamente, também trocam de posições. FIGURA 19 – APLICANDO MÉTODO QUICKSORT COM DOIS PIVÔS E QUATRO VETORES Ao final, a figura 19 apresenta quatro vetores ordenados em ordem crescente, quase totalizando a ordenação do vetor. Conforme verificado nas descrições anteriores, novamente será necessário dividir os quatro vetores, para o algoritmo QuickSort finalizar o processo de ordenação. A figura 20 apresenta a nova divisão dos vetores e a definição de quatro pivôs, 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
  • 24. esquerda. A figura 20 apresenta a seleção de quatro valores como pivô e comparação e troca de posições entre valores do lado esquerdo com valores do lado direto. No primeiro par de vetores, são comparados os valores “2” e “1 e como o valor “2” é maior que o valor “1”, ambos trocam de posições. Em seguida são comparados os valores “4” e “3” e novamente ambos também trocam de posições porque o valor “4” é maior que o valor “3”. Entre o quinto e sexto vetor não ocorrem troca de posições entre valores, finalizando no na última troca de valores entre o sétimo vetor e o oitavo vetor. Ocorre a comparação entre o valor “9” e o valor “7”, trocando de posições porque o valor “9” é maior que o valor “7”. FIGURA 20 – APLICANDO MÉTODO QUICKSORT COM QUATRO PIVÔS E OITO VETORES Ao final o vetor encontra-se com seus valores ordenados de forma crescente conferindo a eficiência do funcionamento do método de ordenação QuickSort. 4.7. ALGORITMO SHELLSORT O método de ordenação ShellSort tem como sua principal característica utilizar um numero de incremento para auxiliar no processo de ordenação O valor inicial para número 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 número de incremento igual a 4. FIGURA 21 – VETOR COM VALORES DESORDENADOS E NUMERO DE INCREMENTO O número de incremento é empregado como referência na seleção de valores do vetor para realizar o processo de ordenação. A figura 22 apresenta o primeiro ciclo de interações de movimentos e troca de posições entre valores no vetor empregando o método ShellSort.
  • 25. Como o valor do número de incremento é igual a “4”, a comparação 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 posições à frente, conforme o número de incremento. Durante a comparação se o primeiro valor for maior que o segundo valor, ocorre a troca de posição entre ambos, caso contrário, as posições se mantém. Na figura 21 as posições entre os valores “1” e “6”, “4” e “5”, “3” e “7” são mantidas porque os primeiros valores são menos que os segundo valores. Porém entre os valores “8” e “2”, os valores trocam de posições porque o valor “8” é maior que o valor “2”. FIGURA 21 – PRIMEIRO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT Após o primeiro ciclo de interações do método ShellSort, pode-se observar os valores no vetor caminhando para a ordenação. A figura 22 apresenta o segundo ciclo de interações para realizar o processo de ordenação. A principal diferença no processo está no valor do número de incremento, que é divido por dois. Desta maneira a seleção de valores para comparação passa a ser após duas posições no vetor. FIGURA 22 – SEGUNDO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT São comparados os pares de valores “1” e “2”, “4” e “3”, “6” e “8”, “5” e “7”, agora os valores são escolhidos com a diferença de duas posições. Os valores “1” e “2”, “6” e “8”, “5” e “7”, mantém suas posições e os valores “4” e “3” trocam de posições porque o valor “4” é maior que o valor “3”. A comparação e troca de posições entre valores no segundo ciclo de iterações formam a nova posição dos valores no vetor.
  • 26. A figura 23 apresenta o terceiro ciclo de interações no vetor. O valor do número de incremento é novamente dividido por dois. As comparações entre valores no vetor ocorrem com valores sucessivos. Os valores “4” e “2”, “6” e “5”, “8” e “7” trocam de posições porque os primeiros valores são maiores que os segundos valores respectivos. Em seguida o valor “4” e o valor “3” também trocam de posições finalizando a ordenação do vetor através do método ShellSort. FIGURA 23 – TERCEIRO CICLO DE INTERAÇÕES NO MÉTODO SHELLSORT O método ShellSort utiliza um valor para definir o número de incremento empregado no processo de seleção de valores. A escolha na seleção dos valores deve respeitar o posicionamento através da distância do número de incremento. O vetor passa por comparações sucessivas e troca de posições entre valores, compondo o processo de ordenação. 4.8. ALGORITMO RADIXSORT O método de ordenação RadixSort trabalha de maneira bem simples. O algoritmo de ordenação percorre o vetor verificando os dígitos de cada valor, e conforme verifica, divide os valores em grupos de valores entre “0” e “9” em ordem crescente. No primeiro ciclo de interações do processo de ordenação, será verificado o primeiro digito de cada valor da direita para a esquerda. A figura 24 apresenta o vetor com 10 valores que serão organizados em ordem crescente. FIGURA 24 – VETOR COM VALORES DESORDENADOS NO MÉTODO 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 interações para a ordenação dos valores no vetor, que são separados em grupos, com
  • 27. dois valores com o digito de valor “0”, três 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 são colocados novamente no vetor, respeitando a ordem crescente ao qual os grupos que foram separados. FIGURA 25 – PRIMEIRO CICLO DE INTERAÇÕES DO MÉTODO RADIXSORT O segundo ciclo de interações é demonstrado na figura 26, a seleção dos valores agora verifica o segundo digito da direita para a esquerda, formando novos grupos de valores entre “0” e “9” em ordem crescente. São separados em grupos pelo segundo digito, um valor de digito de valor “0”, três 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 são colocados novamente no vetor, respeitando a ordem crescente ao qual pertencem aos grupos que foram separados. Figura 26 – Segundo ciclo de interações do método RadixSort O último ciclo de iterações realiza novamente o procedimento de seleção de valores divididos por grupos, porém são 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 opção como método de ordenação mantendo uma boa eficiência ordenando grande e pequenos volumes de dados em tempo reduzido.
  • 28. Figura 27 – Terceiro ciclo de interações do método RadixSort 4. A EFICIÊNCIA DE ALGORITMOS Antes de qualquer consideração em relação à eficiência dos algoritmos, é importante ressaltar que todos algoritmos apresentados, solucionam um dado problema de ordenação, portanto são úteis e empregados em diversas situações. Dados dois ou mais algoritmos para solucionar o mesmo problema, é sensato escolher aquele que obtém uma solução no menor tempo possível e utiliza o menor espaço para representação dos dados do problema (SWAIT, 2002). 4.1. MEDIDAS Numa máquina seqüencial, o tempo total de execução de um algoritmo é composto da soma de tempos de execução das operações primitivas. Em princípio, um histograma das freqüências de execução de cada operação primitiva e uma tabela de tempos de execução individual seria suficiente para prevermos o tempo necessário para obter a solução de um dado problema (SWAIT, 2002). Quando um algoritmo de ordenação deve realizar seu trabalho, pode-se dizer que o algoritmo trabalha na solução de um dado problema. Este problema tem um determinado grau de complexidade, e conforme a complexidade, maiores são as dificuldades e o maior tempo para a solução do problema. A tabela 1 apresenta as ordens de complexidade, que são um conjunto de notações matemáticas que indicam o grau de complexidade de um determinado algoritmo de pesquisa e ordenação. As classes enumeradas na tabelas 1 estão em ordem de esforço crescente, desta maneira os algoritmos mais desejáveis estão no início da lista.
  • 29. constante O(1) log log O(log log n) logarítmica O(log n) linear O(n) n log n O(n log n) quadrática O(n²) cúbica O(n³) exponencial O(2n) Tabela 1 – Ordens de complexidades de algoritmos A notação O() permite distinguir entre algoritmos com diferenças 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, porém também é necessário considerar a quantidade de memória utilizada para realizar o processo de ordenação de um determinado algoritmo. O volume de dados a ser ordenado pode influenciar de diversas maneiras, tanto de forma favorável como de maneira negativa. Por exemplo, pode-se ter uma massa grande de dados para ordenar, porém os mesmos já estão 50% organizados, porque são 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 número de troca de posições entre os dados para efetivar uma ordenação. Outra possibilidade é que um algoritmo normalmente é codificado em uma determinada linguagem de programação, para ser executado em um computador. As linguagens de programação funcionam de diferentes maneiras podendo também afetar no desempenho, e na eficiência da execução do algoritmo de ordenação. A tabela 2 apresenta os algoritmos, distribuídos quando estão no processo de ordenação no melhor, pior e na média dos casos. O RadixSort aparece como uma boa opção em todos os casos. O método de inserção, selecão e ShellSort aparecem como uma boa opção nos seus melhores casos. Ficando os piores casos a princípio para o HeapSort, MergeSort e QuickSort, porém são de fácil implementação e manutenção através de códigos o que justifica também sua escolha como opção. Desta maneira a melhor conclusão na escolha de um algoritmo de ordenação está em considerar as condições, como o volume de dados, a ordem dos dados, a linguagem de programação escolhida para implementar o algoritmo, o computador e quantidade de memória empregados no processo de ordenação.
  • 30. Caso Médio Melhor Caso Pior Caso RadixSort O(n) O(n) O(n) MergeSort O(n log n) O(n log n) O(n log n) QuickSort O(n log n) O(n log n) O(n²) ShellSort O(n1,5 ) O(n) O(n1,5 ) Inserção O(n²) O(n) O(n²) Seleção O(n²) O(n²) O(n²) HeapSort O(n log n) O(n log n) O(n²) BubbleSort O(n²) O(n log n) O(n²) Tabela 2 – Médio, melhor e pior casos dos algoritmos de ordenação
  • 31. REFERÊNCIAS 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, São Paulo, 2002. Wirth, N. Algortimos e Estrutura de Dados. editora LTC, Rio de Janeiro, 1999.