12
Introdução aos Métodos de Ordenação Heider R. da Silva, Douglas M. S. Domingues Universidade Regional integrada do Alto Uruguai e das Missões – Campus Santiago Avenida Batista Bonoto Sobrinho, 733 CEP – 97610-000 – Santiago – RS - Brasil {heider_rp, domingues.douglas}@hotmail.com Resumo. Os métodos de ordenação na computação são algoritmos que ordenam dados em certa ordem a fim de resolver problemas, realizar consultas, classificar e entre outras tarefas cotidianas em que seja preciso colocar uma lista em ordem para facilitar a busca de informações nela contida. Existem diversos métodos para ordenação, mas no presente trabalho será apresentado cinco destes. Palavras-cheve. Métodos de ordenação na computação, facilitar a busca de informações. Abstract. The sorting methods in computing algorithms are ordering data in a certain order to solve problems, perform queries, sort and among other everyday tasks where you need to put a list in order to facilitate the search for information contained therein. There are several methods for ranking, but in this study five of these will be presented. Keywords. Sorting methods in computing, to facilitate the search for information. 1. Introdução Existe atualmente a necessidade de armazenar informações e posteriormente consultar os dados, e o mais importante que armazenar e consultar informações é possui-las tão ordenadas quanto possível seja por ordem alfabética, por idade, localidade ou outro item sobre o qual é necessário trabalhar. Uma das formas mais utilizada para resolver este problema na computação é a ordenação interna, ou seja, ocorre quando todo arquivo a ser ordenado cabe na memória principal de um dispositivo. As ordens mais usadas são as comparações numéricas e lexicográficas. Segundo Nivio Ziviani et al. (2007) ,ordenar corresponde ao processo de rearranjar um conjunto de objetos em ordem ascendente ou descendente. O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto ordenado. A atividade de colocar as coisas em ordem está presente na maioria das aplicações em que os objetos armazenados têm de ser pesquisados e recuperados. As técnicas de ordenação permitem apresentar um conjunto amplo de algoritmos distintos para resolver uma mesma tarefa. Dependendo da aplicação, cada algoritmo considerado possui uma vantagem particular sobre os outros algoritmos.

Introdução aos Métodos de Ordenação

Embed Size (px)

DESCRIPTION

Os métodos de ordenação na computação são algoritmos queordenam dados em certa ordem a fim de resolver problemas, realizarconsultas, classificar e entre outras tarefas cotidianas em que seja precisocolocar uma lista em ordem para facilitar a busca de informações nelacontida. Existem diversos métodos para ordenação, mas no presente trabalhoserá apresentado cinco destes.

Citation preview

  • Introduo aos Mtodos de Ordenao

    Heider R. da Silva, Douglas M. S. Domingues

    Universidade Regional integrada do Alto Uruguai e das Misses Campus Santiago

    Avenida Batista Bonoto Sobrinho, 733 CEP 97610-000 Santiago RS - Brasil

    {heider_rp, domingues.douglas}@hotmail.com

    Resumo. Os mtodos de ordenao na computao so algoritmos que

    ordenam dados em certa ordem a fim de resolver problemas, realizar

    consultas, classificar e entre outras tarefas cotidianas em que seja preciso

    colocar uma lista em ordem para facilitar a busca de informaes nela

    contida. Existem diversos mtodos para ordenao, mas no presente trabalho

    ser apresentado cinco destes.

    Palavras-cheve. Mtodos de ordenao na computao, facilitar a busca de

    informaes.

    Abstract. The sorting methods in computing algorithms are ordering data in a

    certain order to solve problems, perform queries, sort and among other

    everyday tasks where you need to put a list in order to facilitate the search for

    information contained therein. There are several methods for ranking, but in

    this study five of these will be presented.

    Keywords. Sorting methods in computing, to facilitate the search for

    information.

    1. Introduo

    Existe atualmente a necessidade de armazenar informaes e posteriormente consultar

    os dados, e o mais importante que armazenar e consultar informaes possui-las to

    ordenadas quanto possvel seja por ordem alfabtica, por idade, localidade ou outro item

    sobre o qual necessrio trabalhar.

    Uma das formas mais utilizada para resolver este problema na computao a

    ordenao interna, ou seja, ocorre quando todo arquivo a ser ordenado cabe na memria

    principal de um dispositivo. As ordens mais usadas so as comparaes numricas e

    lexicogrficas.

    Segundo Nivio Ziviani et al. (2007) ,ordenar corresponde ao processo de

    rearranjar um conjunto de objetos em ordem ascendente ou descendente. O objetivo

    principal da ordenao facilitar a recuperao posterior de itens do conjunto ordenado.

    A atividade de colocar as coisas em ordem est presente na maioria das aplicaes em

    que os objetos armazenados tm de ser pesquisados e recuperados.

    As tcnicas de ordenao permitem apresentar um conjunto amplo de algoritmos

    distintos para resolver uma mesma tarefa. Dependendo da aplicao, cada algoritmo

    considerado possui uma vantagem particular sobre os outros algoritmos.

  • No trabalho sero apresentados cinco destes mtodos de ordenao que esto subdivididos entre mtodos simples e sofisticados.

    Simples - Insertion Sort

    Simples - Selection Sort

    Simples - Bubble Sort

    Sofisticado - Quick Sort

    Sofisticado Merge Sort

    Esse artigo traz uma introduo aos principais mtodos de ordenao utilizados,

    e est estruturado da seguinte forma: A Seo 2 introduz ao conceito de comparaes

    em uma ordenao. A Seo 3 descreve trs Mtodos Simples de ordenao. Na Seo 4

    descreve dois Mtodos Sofisticados de ordenao. Por fim, a Seo 4 faz uma concluso

    comparando vantagens e desvantagens entre os mtodos.

    2. Problema da ordenao

    Para que uma lista possa ser ordenada os seus elementos devem ser comparados

    dois a dois. Isso significa que dados dois elementos da lista deve ser sempre possvel

    determinar se eles so equivalentes ou se um deles menor que o outro. A ideia

    associada ao termo menor depende do critrio de comparao utilizado.

    Diz-se que uma lista est em ordem crescente se cada um de seus elementos

    menor ou igual ao seu sucessor segundo algum critrio de comparao. Uma lista

    somente pode ser colocada em ordem se seus elementos forem dois a dois comparveis

    e compatveis. O problema da ordenao consiste em, uma dada lista, coloca-la em

    ordem crescente ou decrescente, podendo ser feitas comparaes numricas, alfabticas

    e tambm cronolgicas.

    Comparao numrica: Um nmero x menor do que um nmero y se a

    expresso x-y resulta em um nmero negativo. Esse o tipo mais comum de

    comparao e, de certa forma, todos os demais critrios de comparao derivam

    dele.

    Comparao alfabtica: Um caractere menor do que outro se precede esse

    outro na ordem alfabtica. Por exemplo, o caractere a precede o b, o b

    precede o c e assim por diante. No computador, os caracteres so

    representados atravs de nmeros. Dessa forma, a comparao entre caracteres

    acaba sendo uma comparao entre os cdigos numricos e, portanto, uma

    comparao numrica.

    Comparao cronolgica: Uma data menor do que outra se ela antecede essa

    outra. Uma data pode ser representada atravs de trs nmeros, um para

    representar o ano, outro para o ms e outro para o dia. Ao comparar uma data

    com outra, comparamos o ano. Em caso de empate, comparamos o ms. Em caso

    de novo empate, comparamos o dia. Sendo assim, a comparao cronolgica

    tambm feita comparando nmeros.

  • 3. Mtodos Simples

    So adequados para pequenos arquivos, sendo algoritmos pequenos e fceis de

    implementar. Tais mtodos, considerados inferiores, so bastante simples, mas

    introduzem ideias que servem de base para outros mtodos mais eficientes.

    Esses mtodos utilizam como uma de suas operaes bsicas a comparao de

    elementos da lista.

    3.1. Insertion Sort

    Eficiente para listas que esto quase em ordem. o mtodo que consiste em inserir

    informaes num conjunto j ordenado. Seu Funcionamento similar ao da ordenao

    das cartas de um baralho.

    O Mtodo de Insero, tambm conhecido como Insero Direta, bastante

    simples. Alm disso, ele extremamente eficiente para listas que j estejam

    parcialmente ordenadas.

    Nesse mtodo consideramos que a lista est dividida em parte esquerda, j

    ordenada, e parte direita, em possvel desordem. Inicialmente, a parte esquerda contm

    apenas o primeiro elemento da lista. Cada iterao consiste em inserir o primeiro

    elemento da parte direita (piv) na posio adequada da parte esquerda, de modo que a

    parte esquerda continue ordenada. fcil perceber que se a lista possui n elementos,

    aps n-1 inseres ela estar ordenada.

    Para inserir o piv percorremos a parte esquerda, da direita para a esquerda,

    deslocando os elementos estritamente maiores que o piv uma posio para direita. O

    piv deve ser colocado imediatamente esquerda do ltimo elemento movido.

    Figura 1. Exemplo algoritmo de Insero.

  • Figura 2. Ilustrao do funcionamento do algoritmo por Insero.

    Na figura a seguir exibimos o contedo de um vetor aps cada iterao do lao

    mais externo do algoritmo de insero. A parte esquerda da lista aparece sombreada.

    Figura 3. Exemplo de vetor aps ordenao por Insero.

    3.2. Selection Sort

    Tem como principio de funcionamento selecionar o menor ou maior item do vetor e a

    seguir troc-lo pela primeira posio do vetor. Isto ocorre para os n - 1 elementos

    restantes, depois com os n - 2 itens, at que reste apenas um elemento.

    O mtodo de seleo tem como ponto forte de que ele realiza poucas operaes

    de swap. Seu desempenho, em termos absolutos, costuma ser superior ao do Mtodo

    Bolha, mas inferior ao do Mtodo de Insero.

  • Figura 4. Ilustrao do funcionamento do algoritmo de Seleo.

    A colocao do item no seu lugar correto na sequncia ordenada, como

    demonstra a Figura 4 realizada trocando o item de menor valor pela primeira posio

    do vetor.

    Assim como no mtodo de insero, nesse mtodo consideramos que a lista est

    dividida em parte esquerda, j ordenada, e parte direita, em possvel desordem. Alm

    disso, os elementos da parte esquerda so todos menores ou iguais aos elementos da

    parte direita.

    Cada iterao consiste em selecionar o menor elemento da parte direita (piv) e

    troc-lo com o primeiro elemento da parte direita. Com isso, a parte esquerda aumenta,

    pois passa a incluir o piv, e a parte direita diminui. Inicialmente, a parte esquerda

    vazia. Se a lista possui n elementos, aps n 1 iteraes ela estar ordenada.

    Figura 5. Exemplo algoritmo de Seleo.

  • O algoritmo constitudo de dois laos contados encaixados que realizam as

    mesmas quantidades de iteraes. Dessa forma, se torna evidente que o algoritmo de

    seleo realiza (n -n) / 2 comparaes.

    A figura abaixo exibe o contedo de um vetor aps cada iterao do lao mais

    externo do algoritmo de seleo. A parte esquerda da lista aparece sombreada.

    Figura 6. Exemplo de vetor aps ordenao por Seleo.

    3.3. Bubble Sort

    o mtodo mais simples em termo de implementao, porm o menos eficiente. A

    ideia principal do algoritmo percorrer o vetor n1 vezes, a cada passagem fazendo flutuar para o inicio o menor elemento da sequncia. Seu uso no recomendado para

    vetores com muitos elementos.

    Figura 7. Ilustrao do funcionamento do algoritmo tipo Bolha.

    Em cada iterao do mtodo, percorrida a lista a partir de seu inicio

    comparando cada elemento com seu sucessor, trocando-os de posio se houver

    necessidade. possvel mostrar que, se a lista tiver n elementos, aps no mximo (n-1)

    iteraes a lista estar em ordem.

  • Figura 8. Exemplo algoritmo de tipo Bolha.

    Na Figura 8 percebe-se que ao final da primeira iterao do primeiro lao do

    algoritmo, o maior elemento da lista estar na ultima posio do vetor. Ao final da

    segunda iterao, os dois maiores valores da lista estaro nas duas ultimas posies do

    vetor L, em ordem crescente. Observa-se tambm que quando compararmos dois

    elementos da lista, somente feito o swap se o antecessor for menor do que o sucessor,

    pois foi tido o cuidado de utilizar uma desigualdade estrita na comparao. Como

    consequncia, o algoritmo Bolha estvel.

    Figura 9. Exemplo de vetor aps ordenao por algoritmo tipo Bolha.

    Na Figura 9 percebe-se que no final da segunda iterao a lista j estava

    ordenada. Nas prximas iteraes no houve nenhuma alterao na lista, mas a ideia

    bsica percorrer o arquivo sequencialmente varias vezes. Cada passagem consiste em

    comparar cada elemento no arquivo e o seu sucessor e trocar os dois elementos se no

    estiverem na ordem certa.

    4. Mtodos Sofisticados

    So adequados para grandes arquivos, requerem poucas comparaes, sendo o problema

    sua complexidade para se implementar.

    4.1. Quick Sort

    o algoritmo mais rpido que se conhece entre os de ordenao interna para uma ampla

    variedade de situaes. Foi escrito em 1960 e publicado em 1962 por C. A. R. Hoare.

    Adotando a estratgia Dividir para conquistar o funcionamento resume-se a dividir o

    problema de ordenar um vetor de n posies em dois outros menores.

  • Figura 10. Ilustrao do funcionamento do algoritmo QuickSort.

    Nesse mtodo, a lista dividida em parte esquerda e parte direita, sendo que os

    elementos da parte esquerda so todos menores que os elementos da parte direita. Essa

    fase do mtodo chamada de Partio.

    Uma estratgia para fazer a Partio escolher um valor como piv e ento

    colocar na parte esquerda os elementos menores ou iguais ao piv e na parte direita os

    elementos maiores que o piv.

    Utilizaremos como piv o primeiro elemento da lista. Nesse caso, o piv deve

    ser colocado entre as duas partes. O procedimento Partio, que implanta tal estratgia,

    descrito nas Figuras 11 e 12.

    Figura 11. Partio.

  • Figura 12. Algoritmo de procedimento de Partio.

    No procedimento Partio a varivel i avana at encontrar um elemento maior

    do que o piv e a varivel j recua at encontrar um elemento menor ou igual ao piv.

    feita ento a troca do elemento que est na posio i com o elemento que est na posio

    j. Esse processo repetido at termos i > j. Para finalizar, o piv colocado entre as

    duas partes fazendo troca (L[INICIO], L[j]). A posio devolvida ao chamador do

    procedimento.

    Figura 13. Exemplo algoritmo QuickSort.

    Na figura acima, as duas partes so ordenadas recursivamente (usando o prprio

    Quicksort). A lista estar ento ordenada.

    4.2. Merge Sort

    Esse mtodo, proposto por John Von Neumann em 1945, baseado numa estratgia de

    resoluo de problemas conhecida no Mtodo QuickSort como diviso e conquista. Essa

    tcnica consiste, basicamente, em decompor a instncia a ser resolvida em instncias

    menores e do mesmo tipo, resolver tais instncias (em geral, recursivamente) e por fim

    utilizar as solues parciais para obter uma soluo da instncia original.

  • Figura 14. Ilustrao do funcionamento do algoritmo MergeSort.

    No MergeSort dividimos a lista em duas metades. Essas metades so ordenadas

    recursivamente (usando o prprio MergeSort) e depois so intercaladas como

    mostrado na Figura 15.

    Na Figura 15 ser apresentado implementao do mtodo Merge responsvel

    pela intercao do intervalo do vetor passado a ele. Tal procedimento a parte principal

    do MergeSort e nele onde os elementos so movimentados para as posies

    adequadas.

    Figura 15. Algoritmo procedimento Merge.

  • Figura 16. Algoritmo MergeSort

    5. Concluses

    Foram apresentados cinco mtodos de ordenao interna mediante a

    exemplificao dos algoritmos. A Seo 3 apresentou mtodos de ordenao simples o

    insertionSort, SelectionSort e BubbleSort, j na Seo 4 foram apresentados dois

    mtodos sofisticados o QuickSort e MergeSort.

    No existe um mtodo de ordenao considerado universalmente superior a

    todos os outros. necessrio analisar o problema e, com base nas caractersticas dos

    dados, decidir qual o mtodo que melhor se aplica ele.

    Aps a exemplificao desses mtodos atravs de seus algoritmos, agora sero

    apresentadas algumas tabelas comparativas mostrando as vantagens e desvantagens

    entre os mtodos mostrados neste trabalho.

    Tabela 1. Vantagens e desvantagens do Mtodo Simples InsertSort

    Vantagens Desvantagens

    - Fcil Implementao - Nmero grande de movimentao

    - Algoritmo Estvel - Ordem de complexidade quadrtica

    - O vetor j ordenado favorece a

    ordenao

    - Ineficiente quando o vetor est ordenado

    inversamente;

    Tabela 2. Vantagens e desvantagens do Mtodo Simples SelectionSort

    Vantagens Desvantagens

    - Fcil Implementao - O fato de o arquivo j estar ordenado no

    influencia em nada

    - Pequeno nmero de movimentaes - Ordem de complexidade quadrtica

    - Interessante para arquivos pequenos - Algoritmo no estvel

  • Tabela 3. Vantagens e desvantagens do Mtodo Simples BubbleSort

    Vantagens Desvantagens

    - Fcil Implementao - O fato de o arquivo j estar ordenado no

    influencia em nada

    - Algoritmo Estvel - Ordem de complexidade quadrtica

    Tabela 4. Vantagens e desvantagens do Mtodo Sofisticado QuickSort

    Vantagens Desvantagens

    - Extremamente Eficiente - Implementao difcil

    - Necessita apenas de uma pequena pilha

    como memria extra

    - No estvel

    Tabela 5. Vantagens e desvantagens do Mtodo Simples MergeSort

    Vantagens Desvantagens

    - Passvel de ser transformado em estvel - Utiliza memria auxiliar

    - Fcil Implementao

    Referencias

    Jnior, A. C. N. (2008) ALGORITMOS E ESTRUTURAS DE DADOS Mtodos de

    ordenao Interna.. Disponvel em: www.decom.ufop.br/menotti/aedI082/tps/tp3-sol1.pdf. Acessado em Julho de

    2014.

    Sales, G. V. (2013) Anlise de Desempenho de Algoritmos de Ordenao. Disponvel

    em: http://pt.slideshare.net/gtsalles/artigo-paa-gustavo-de-carvalho-sales.

    Acessado em Julho de 2014.

    Oliveira, A. B. Mtodos de Ordenao Interna. Visual Book, So Paulo, 1st edition,

    2002.