Вы находитесь на странице: 1из 12

Mtodos de Ordenao

Bruno R. Sandroni, Carlos Henrique, Danilo Mazzilli, Halyson G. Lima4, Leandro Valado5 Departamento de TI - Universidade Federal de Viosa Campus Rio Parnaba Caixa Postal 38.810-000 Rio Paranaba MG Brasil
{halyson.goncalves,carlos.h.ferreira, bruno.sandroni, leandro.valadao, danilo.paula}@ufv.br

Abstract.The development of technology along with the increasing data and tasks that need to be more agile and simple is leading the construction of algorithms to automate the process of searching and sorting in software. This article is aimed at presenting the major algorithms, their features, advantages and a comparison showing the time for solving the problem of some instances pre - defined. Resumo. O desenvolvimento da tecnologia juntamente com o aumento crescente de dados e tarefas que necessitam ser mais geis e simples tem levando a construo de algoritmos para automatizarem o processo de busca e ordenao nos softwares. Este artigo, visa h apresentao dos principais algoritmos, suas funcionalidades, vantagens e uma comparao mostrando o tempo para resoluo do problema de algumas instncias pr - definidas.

1. Introduo
Devido necessidade do ser humano de manipular dados ordenados para facilitar e acelerar processos, este trabalho ser desenvolvido para demonstrar alguns algoritmos j existentes que fazem ordenao de valores e apresentam os resultados e a eficincia dos mesmos para cada caso. De acordo com isso ser demonstrada a utilizao, o algoritmo, a analise e os testes feitos em algoritmos de ordenao especficos, que sero: InsertionSort, SelectionSort, MergeSort, QuickSort e BubbleSort, Apresentando assim a qualidade de cada algoritmo e a necessidade de utilizar cada um deles em um contexto especifico para otimizar processos. Este trabalho trouxe algumas duvidas e algum aprendizado, tcnicas de programao na linguagem C que foram utilizadas, como manipulaes em arquivos e utilizao dos parmetros argc e argv[] na funo main, utilizados para transmisso de parmetros na chamada do programa. Tambm ajuda na demonstrao da necessidade de ordenaes no s na rea da computao, este problema de ordenao um problema recorrente no dia a dia do ser humano, digamos, por exemplo: uma lista telefnica fica em ordem alfabtica, imaginemos o caso de uma lista telefnica em ordem totalmente aleatria o quo difcil seria para encontrar algum nmero de telefone nela, e existem outros problemas tambm que so facilitados possuindo instncias ordenadas.

A partir desse trabalho se pode demonstrar que esses mtodos especficos so importantes para organizar quantidades de dados de qualquer tamanho, partindo de instncias pequenas at instancias muito grandes do mesmo problema, percebendo que alguns desses algoritmos so melhores em certos casos e outros so melhores em outros casos. Os testes que foram utilizados foram testes usando instncias ordenadas tanto em ordem crescente como decrescente e tambm instancias em ordem aleatria de tamanhos variados, foram basicamente instancias de 10, 100, 1000, 10000, 100000, 1000000, e tambm realizados testes em maquinas diferentes para ter resultados empricos de tempo em arquiteturas diferentes.

2. Algoritmos de Busca e Ordenao


Nessa seo sero apresentados os algoritmos aqui estudados, e a explicao de cada um deles.

2.1 InsertionSort O insertionsort, ou ordenao por insero, um simples algoritmo de ordenao, eficiente quando aplicado a um pequeno nmero de elementos. Em termos gerais, ele percorre um vetor de elementos da esquerda para a direita e medida que avana vai deixando os elementos mais esquerda ordenados. O algoritmo de insero funciona da mesma maneira com que muitas pessoas ordenam cartas em um jogo de baralho como o pquer.(A. C. J. NAZAR, D. G. MENOTTI, 2008, p. 10).

Figura 1: InsertionSort. Disponvel em:www.roseindia.net/java/beginners/arrayexamples

2.2 SelectionSort O selectionsort (do ingls, ordenao por seleo), um algoritmo de ordenao baseado em se passar sempre o menor valor do vetor para a primeira posio (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posio, e assim feito sucessivamente com os (n-1) elementos restantes, at os ltimos dois elementos.(A. C. J. NAZAR, D. G. MENOTTI, 2008, p. 14).

Figura 2: InsertionSort. Disponvel em:www.nerds-attack.blogspot.com.br 2.3 MergeSort O mergesort, ou ordenao por mistura, ordenao do tipo dividir para conquistar. um exemplo de algoritmo de

Sua ideia bsica consiste em dividir o problema em vrios subproblemas e resolver esses subproblemas atravs da recursividade e conquistar(aps todos os subproblemas terem sido resolvidos ocorre a conquista que a unio das resolues dos subproblemas).Como o algoritmo do mergesort usa a recursividade em alguns problemas esta tcnica no muito eficiente devido ao alto consumo de memria e tempo de execuo.(A. C. J. NAZAR, D. G. MENOTTI, 2008, p. 30). Os trs passos teis dos algoritmos dividir para conquistar que se aplicam ao merge sort so: 1. Dividir: Dividir os dados em subseqncia pequenas; 2. Conquistar: Classificar as duas metades recursivamente aplicando o merge sort; 3. Combinar: Juntar as duas metades em um nico conjunto j classificado.

Figura 3: MergeSort. Disponvel em: webdocs.cs.ualberta.ca /~holte/T26/merge-sort 2.4 QuickSort O algoritmo quicksort um mtodo de ordenao muito rpido e eficiente, inventado por C.A.R. Hoareem 1960, quando visitou a Universidade de Moscovo como estudante. Naquela poca. Hoare trabalhou em um projeto de traduo de mquina para o NationalPhysicalLaboratory. Ele criou o 'quicksort ao tentar traduzir um dicionrio de ingls para russo, ordenando as palavras, tendo como objetivo reduzir o problema original em subproblemas que possam ser resolvidos mais fcil e rapidamente. Foi publicado em 1962 aps uma srie de refinamentos. (A. C. J. NAZAR, D. G. MENOTTI, 2008, p. 21).

Figura 4: MergeSort. Disponvel em: en.wikipedia.org/wiki/Quicksort

2.5 BubbleSort
O bubblesort, ou ordenao por flutuao (literalmente "por bolha"), um algoritmo de ordenao dos mais simples. A idia percorrer o vetor diversas vezes, a cada passagem

fazendo flutuar para o topo o maior elemento da seqncia. Essa movimentao lembra a forma como as bolhas em um tanque de gua procuram seu prprio nvel, e disso vem o nome do algoritmo.(A. C. J. NAZAR, D. G. MENOTTI, 2008, p. 6).

Figura 5: BubbleSort. Disponvel em: www.mehmetduran.com/Blog/Makale

3. Funo de Complexidade
As funes de complexidades visam apresentar uma medida que est relacionada ao custo de execuo de algoritmo. Seja f(x) uma funo de complexidade, onde "x" o tamanho das instncias, f(x) retornar o custo de execuo de um determinado algoritmo para a respectiva instncia. Dentro das funes de complexidade temos dois tipos, sendo eles: Funo de complexidade espacial: Est relacionado a quantidade de memria necessria para execuo da instncia. Funo de complexidade temporal: Est relacionado ao tempo para que o algoritmo resolva o problema, consequentemente o nmero de vezes que um determinado algoritmo realiza as operaes mais relevantes necessrias para sua execuo.

3.1 Notao til (~) Uma funo de complexidade pode ter vrias notaes uma delas a notao til(~). Caso possvel e apresentado, uma funo de complexidade f(x) em forma polinomial, essa notao preza que termos de menor ordem so desprezveis, considerando assim apenas o

termo de maior ordem e sua constante multiplicativa. Ex: 2n + 2, na notao til(~) teramos apenas 2n. 3.2 Big-Oh A funo notao Big-Oh trata o pior caso referente a instncia utilizada. Por exemplo: Um algoritmo que percorre um vetor que vai de 0 at n, afim de encontrar um elemento e esse elemento est em ltima posio, logo, precisar percorrer todo o vetor, assim pode-se considerar como o pior caso, em que a complexidade do pior caso definida O(n). 3.3 Big-mega A notao Big-mega trata o melhor caso referente a instncia utiliza. No mesmo exemplo anterior em que um algoritmo que percorre um vetor que vai de 0 at n, afim de encontrar um elemento e esse elemento est na primeira posio , logo, precisar acessar s a primeira posio do vetor. assim pode-se considerar como o melhor caso, em que a complexidade seria (1), sendo que o melhor caso sempre ter notao sendo o melhor caso constante ou no. 3.4 Big-Theta A notao Big-Theta trata o caso mdio referente a instncia utilizada. Utilizando ainda o exemplo de um algoritmo que percorre um vetor que vai de 0 at n, afim de encontrar um elemento, e esse elemento est no meio do vetor, logo, percorrer n/2 posies, assim pode-se considerar que o caso mdio seria esse com uma complexidade (n/2) e tambm se considera Big-Theta quando se tem o Big-Oh e o Big-mega com a mesma notao Til (~).

4. Estudo da complexidadeBubbleSort para nmero de comparaes


A equao apresentada na figura 6 demonstra o clculo da funo de complexidade em relao ao nmero de comparaes.

Figura 6: Complexidade BubbleSort Comparaes. Disponvel em: www.decom.ufop.br/menotti/aedI082/tps/tp3-sol1.pdf 4.1 Melhor Caso O algoritmo apresentado possui uma complexidade sempre O (n2) para o melhor caso. Isso ocorre pelo bubblesort possuir dois loops internos, no qual so executados com um nmero de passos que depende apenas do tamanho da entrada e no da quantidade. 4.2 Pior Caso O algoritmo apresentado possui uma complexidade sempre O (n2) para o pior caso. 4.3 Caso Mdio

O algoritmo apresentado possui uma complexidade sempre O (n2) para o caso mdio, no sendo muito eficiente para entradas aleatrias.

5. Estudo da complexidade BubbleSort para nmero de movimentaes


A equao apresentada figura 7 demonstrao clculo da funo de complexidade em relao ao nmero de movimentaes, no qual basta multiplicar por C (n) por 3 que indica o nmero de movimentaes a cada interao ocorrida no algoritmo.

Figura 7: Complexidade BubbleSort Movimentaes. Disponvel em: www.decom.ufop.br/menotti/aedI082/tps/tp3-sol1.pdf 5.1 Melhor Caso O algoritmo apresentado possui uma complexidade sempre O (n2) para o melhor caso. Isso ocorre pelo bubblesort possuir dois loops internos, no qual so executados com um nmero de passos que depende apenas do tamanho da entrada e no da quantidade. 5.2 Pior Caso O algoritmo apresentado possui uma complexidade sempre O (n2) para o pior caso. 5.3 Caso Mdio O algoritmo apresentado possui uma complexidade sempre O (n2) para o caso mdio, no sendo muito eficiente para entradas aleatrias.

6. Vantagens x Desvantagens
Vantagens Fcil implementao. Algoritmo estvel. Desvantagens Caso o vetor o vetor j esteja ordenando no ajuda em nada. Ordem de complexidade quadrtica.

7. Teste Empricos
Os testes a serem apresentados foram executados num notebook com a seguinte configurao: Processador Core 2 Duo 2.54 GHz. 4 GB de SDRAM DDR 3. Disco Rgido 500GB. Placa de Vdeo On - Board. Windows 7 Ultimate 64 bits.

Os algoritmos de ordenao foram escritos na linguagem C, sendo utilizado o software para edio e compilao Dev C++. Portanto, os valores podem ser diferentes em computadores com configuraes diferentes, oscilando para maior ou menor o tempo gasto ordenao das instncias.

8. Resultados
Foram testados os cinco mtodos de ordenao para os vetores de tamanho (10, 100, 1000, 10000, 100000) e para cada vetor um tipo diferente (crescente, decrescente, randmico).

8.1. Comparao Emprica As tabelas a seguir, demonstram a comparao emprica dos algoritmos de ordenao SelectionSort, InsertionSort, MergeSort, QuickSort e BubbleSort, ou seja, apresenta qual o tempo (em segundos) gasto para cada algoritmo para ordenar cada vetor. A tabela 1 apresenta o resultado levando em considerao que o vetor a ser organizado esteja em ordem crescente, a tabela 2, leva em considerao que o vetor esteja em ordem decrescente, e a tabela 3, que o vetor esteja organizado de forma randmica.

10 SelectionSort 0 InsertionSort 0 MergeSort QuickSort BubbleSort 0 0 0

100 0 0 0 0 0

1.000 0 0 0 0 0

10.000 1 0 0 0 1

100.000 27 0 0 0 64

Tabela 1 Ordem crescente

10 SelectionSort 0 InsertionSort 0 MergeSort QuickSort BubbleSort 0 0 0

100 0 0 0 0 0

1.000 0 0 0 0 0

10.000 1 2 0 0 1

100.000 40 64 0 0 80

Tabela 2 Ordem decrescente 10 SelectionSort 0 InsertionSort 0 MergeSort QuickSort BubbleSort 0 0 0 100 0 0 0 0 0 1.000 0 0 0 0 0 10.000 1 1 0 0 1 100.000 25 32 0 0 67

Tabela 3 Ordem randmica 8.2. Comparao Terica A seguir, sero apresentadas duas tabelas onde ser possvel realizar uma comparao terica dos algoritmos de ordenao anteriormente apresentados, ou seja, possui qual a funo de complexidades relacionada ao custo de execuo do algoritmo. A tabela 4 possui as funes de complexidade de cada algoritmo levando em considerao o numero de comparaes, considerando o melhor caso, o caso mdio e o pior caso para cada algoritmo. A tabela 5 possui as funes de complexidade considerando o numero de movimentaes.

Melhor Caso SelectionSort InsertionSort MergeSort QuickSort BubbleSort n n n n n

Caso Mdio n n n n n

Pior Caso n n n n n

Tabela 4 Nmero de comparaes

Melhor Caso SelectionSort InsertionSort MergeSort QuickSort BubbleSort n 0 n 1 n

Caso Mdio n n n n n

Pior Caso n n n n n

Tabela 5 Nmero de movimentaes

9. Concluso
Com o desenvolvimento do trabalho podemos entender e perceber diferenas entre os cincos algoritmos estudados seja para movimentao dos dados ou comparao entre eles. Portanto, no podemos definir dos cincos algoritmos o melhor entre eles, pois depende do caso ao qual ele ser utilizado para resolver determinado problema.

10.Referncias Bibliogrficas
A. C. J. NAZAR, D. G. MENOTTI. Mtodos de Ordenao Interna. Departamento de Cincia da Computao, UFOP.Editora Campus, Set. 2008. Disponvel em:

<http://www.decom.ufop.br/menotti/aedI082/tps/tp3-sol1.pdf>. Acesso em: 21Fev. 2013. J. L. Rosa. Mtodos de Ordenao. Departamento de Cincia da Computao, USP.Mar. 2011. Disponvel em: <http://wiki.icmc.usp.br/images/b/b3/SCC501Cap4.pdf>. Acesso em: 21 Fev. 2013. F. C. Botelho. Ordenao*. Departamento de Cincia da Computao, UFMG. Mar. 2011. Disponvel em: <http://www.dcc.ufmg.br/algoritmos-

edicao2/cap4/transp/completo1/cap4.pdf>. Acesso em: 21 Fev. 2013. N, Ziviani. Projeto de Algoritmos com Implementao em Pascal e C.3. ed.Belo Horizonte: Editora Cengage Learning, 2010. 130 p.

Вам также может понравиться