8
1. INTRODUÇÃO Algoritmo de ordenação em ciência da computação é um algoritmo que coloca coloca os elementos de uma dada sequência em certa ordem em outras palavras, efetua sua ordenação completa ou parcial, as ordens mais usadas são a numérica. Existem várias razões para se ordenar uma sequência, uma delas é a possiilidade se acessar seus dados de modo mais eficiente. !m tipo de algoritmo astante usado na resolução de prolemas computacionais é os algoritmos de ordenação, que servem para ordenar ou organizar uma lista de n"meros ou palavras de acordo com a sua necessidade, as linguagens de programação #á possuem métodos de ordenação. $rdenação é o ato de se colocar os elementos de uma sequência de informações, ou dados, em uma ordem predefinida. !m algoritmo é o fluxograma, uma representação visual que utiliza s%molos que são figuras geométricas, cada uma com sua função especificam, mostra o fluxo do algoritmo e tamém elimina as várias interpretações que a descrição narrativa permitia sore um algoritmo. Existe a linguagem algoritma &'ortugol( que é a que mais se aproxima da estrutura de uma linguagem estruturada.
9
2. Objetivo do Trabalho Trabalho
Este traal/o tem como o#etivo mostrar que o algoritmo é um esquema de resolução de um prolema, pode ser implementado com qualquer sequência de valores ou o#etos que ten/am uma l0gica infinita, por exemplo, a l%ngua portuguesa, a linguagem 'ascal, a linguagem -, uma sequência numérica, ou se#a, qualquer coisa que possa fornecer uma sequência l0gica. A vantagem vantagem dessa forma de representação é que qualquer um pode fazê1la sem ter con/ecimentos avançados. A desvantagem desvantagem é que não /á um padrão, cada pessoa pode escrever como quiser. A -lassificação -lassificação ou ordenação de dados tem assumido grandes proporções no 2mito do processamento de informações, devido a sua import2ncia na análise de desempen/o e de ser utilizado como processo intermediário em diversas aplicações.
10
3. Estrutura de Dados
3a -iência da -omputação, uma estrutura de dados é um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente. Estruturas de dados e algoritmos são temas fundamentais da ciência da computação, sendo utilizados nas mais diversas áreas do con/ecimento e com os mais diferentes prop0sitos de aplicação. As estruturas de dados são c/amadas tipos de dados compostos que se dividem em /omogêneos &vetores e matrizes( e /eterogêneos ®istros(. As estruturas /omogêneas são con#untos de dados formados pelo mesmo tipo de dado primitivo. As estruturas /eterogêneas são con#untos de dados formados por tipos de dados primitivos diferentes.
11
3a -iência da -omputação, os algoritmos de ordenação são o algoritmo que coloca os elementos de uma dada sequência em certa ordem, em outras palavras efetua sua ordenação completa ou parcial. $ o#etivo da ordenação é facilitar a recuperação dos dados de uma lista.
%.1 De*i#i()o de &lgorit'os $ Algoritmo é um esquema de resolução de um prolema, pode ser implementado com qualquer sequência de valores ou o#etos que ten/am uma l0gica infinita & 'or exemplo, a l%ngua portuguesa, a linguagem 'ascoal, a linguagem -, uma sequência numérica, um con#unto de o#etos tais como lápis e orrac/a(, ou se#a, qualquer coisa que possa fornecer uma sequência l0gica. 'odemos ilustrar um algoritmo pelo exemplo de uma receita culinária, emora muitos algoritmos se#am mais complexos. !m Algoritmo mostra passo a passo os procedimentos necessários para resolução de um prolema.
12
Essa forma consiste na definição de uma pseudolinguagem de programação, cu#os comandos são em português, mas que #á lemram um pouco a estrutura de uma linguagem de programação estruturada, ou se#a, a pseudolinguagem se assemel/a muito ao modo como os programas são escritos. *sso vai permitir que os algoritmos fossem traduzidos, quase que diretamente, para uma linguagem de programação. Algoritmo 4-alcular édia5 em linguagem algoritma Algoritmo 4-alcularedia5 var n6,n7,n8,media )real9 inicio leia&n6,n7,n8(9 media: &n6;n7;n8(<89 se media=>? então escreva&4'araéns você foi aprovado5(9 senão escreva&4*nfelizmente você ficou de exame5(9 @im se fimalgoritmo.
13
$rdenar corresponde ao processo de reorganizar um con#unto de o#etos em ordem ascendente ou descendente. $ o#etivo principal da ordenação é facilitar a recuperação posterior de itens do con#unto ordenado
tKpedef struct L int MeK 9 <<-ampo c/ave N*tem 9 3ão precisa aela 6) *tem 'ara testarmos cada algoritmo precisamos gerar vetores de diversos taman/os) ascendente em ordem alfaética. @oram usadas as seguintes estruturas e funções para representar e gerar os vetores para testes dos algoritmos) BistCBistC+tring== copiaDetorpalavrasEmaral/adas copiaDetorpalavrasEmaral/adas > ne BistCBistCstring==&(9 BistCBistC+tring== vetorpalavrasEmaral/adas > ne BistCBistCstring==&(9
vetorpalavrasEmaral/adas.Add&ne
palavrasAleatoria.Add&FF(9
14
palavrasAleatoria.Add&F*F(9
palavrasAleatoria.Add&F3F(9
palavrasAleatoria.Add&FOF(9
palavrasAleatoria.Add&F!F(9
palavrasAleatoria.Add&FPF(9
palavrasAleatoria.Add&FRF(9
palavrasAleatoria.Add&FBF(9
palavrasAleatoria.Add&F'F(9
palavrasAleatoria.Add&FQF(9
palavrasAleatoria.Add&FSF(9
palavrasAleatoria.Add&F3F(9
palavrasAleatoria.Add&FTF(9
palavrasAleatoria.Add&F!F(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&FRF(9
palavrasAleatoria.Add&FDF(9
palavrasAleatoria.Add&F'F(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&FSF(9
palavrasAleatoria.Add&FAF(9
palavrasAleatoria.Add&FTF(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&F$F(9
palavrasAleatoria.Add&FDF(9
palavrasAleatoria.Add&F-F(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&F+F(9
palavrasAleatoria.Add&FAF(9
palavrasAleatoria.Add&FGF(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&FHF(9
palavrasAleatoria.Add&F$F(9
palavrasAleatoria.Add&FEF(9
palavrasAleatoria.Add&F-F(9
palavrasAleatoria.Add&FIF(9
palavrasAleatoria.Add&F+F(9
palavrasAleatoria.Add&FJF(9
15
palavrasAleatoria.Add&FTF(9
palavrasAleatoria.Add&FJF(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&F@F(9
palavrasAleatoria.Add&FDF(9
palavrasAleatoria.Add&FHF(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&F*F(9
palavrasAleatoria.Add&FAF(9
palavrasAleatoria.Add&FOF(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&FPF(9
palavrasAleatoria.Add&F$F(9
palavrasAleatoria.Add&FBF(9
palavrasAleatoria.Add&F-F(9
palavrasAleatoria.Add&FQF(9
palavrasAleatoria.Add&F+F(9
palavrasAleatoria.Add&FGF(9
palavrasAleatoria.Add&FTicardoF(9
palavrasAleatoria.Add&FHF(9
palavrasAleatoria.Add&FJustavoF(9
palavrasAleatoria.Add&FEF(9
palavrasAleatoria.Add&FEduardoF(9
palavrasAleatoria.Add&FIF(9
palavrasAleatoria.Add&FJiovanniF(9
int teste > 6UU9 for &int indice > U9 indice C V9 indice;;( L /ile &vetorpalavrasEmaral/adasWindiceX.-ount C teste(
16
.1 Orde#a()o I#ter#a +ão os métodos que não necessitam de uma mem0ria secundária para o processo, a ordenação é feita na mem0ria principal do computador.
.2 Orde#a()o E6ter#a Ouando o arquivo a ser ordenado não cae na mem0ria principal, tem de ser armazenado em fita ou disco. A principal principal diferença entre os dois grupos é que no método de ordenação interna qualquer registro pode ser acessado diretamente, enquanto no método externo é necessário fazer o acesso em locos.
17
7. 4todos de Orde#a()o I#ter#a Ouando vamos escol/er um algoritmo de ordenação, devemos ol/ar um aspecto importante, quanto tempo será gasto durante a execução. 'ara algoritmos de ordenação interna, as medidas de complexidade relevantes contam o n"mero de movimentações de itens do arquivo e o n"mero de comparações entre c/aves. $utra medida que pesa na escol/a é a quantidade de mem0ria extra utilizada pelo algoritmo. étodos que realizam a permutação dos elementos no pr0prio vetor são c/amados *3 +*!, esses métodos são os preferidos. $s métodos que necessitam de mem0ria extra para armazenar outra c0pia dos itens possuem menor import2ncia. $s métodos de ordenação interna são classificados em dois sugrupos)
4todos 8i'9les
ule+ort
*nsert+ort
4todos E*i/ie#tes +/ell+ort
18
7.1 $lise do algorit'o $ ule+ort é um método de simples implementação, porem a sua eficiência é a menor entre os métodos de ordenação interna. Admite contudo vários mel/oramentos e é tamém uma oa ase para a construção de métodos mais elaorados.
:a#tage#s Y @ácil implementação9 Y Algoritmo estável
19
7.2 I#sert8ort $ método de ordenação por *nserção Gireta é o mais rápido entre os outros métodos considerados ásicos, ele é um algoritmo simples e eficiente quando aplicado em pequenas listas. 3este algoritmo a lista é percorrida da esquerda para a direita, Z medida que avança vai deixando os elementos mais Z esquerda ordenados.$ algoritmo funciona da mesma forma que as pessoas usam para ordenar cartas em um #ogo de aral/o como o p[quer. p[qu er.
Tabela % ilustra()o do *u#/io#a'e#to do algorit'o I#sert8ort
20
7.3 8hell8ort +/ell+ort aseia1se em se passar sempre o menor valor para a primeira posição, depois o segundo menor valor para a segunda posição e assim sucessivamente, até os dois "ltimos elementos. 3este algoritmo será escol/ido um n"mero a partir do primeiro, este n"mero escol/ido é comparado com os n"meros a partir da sua direita, quando encontrado um n"mero menor, o n"mero escol/ido ocupa a posição do menor n"mero encontrado. Este n"mero encontrado será o pr0ximo n"mero escol/ido, caso não for encontrado nen/um n"mero menor que este escol/ido, ele é colocado na posição do primeiro n"mero escol/ido, e o pr0ximo n"mero Z sua direita vai ser o escol/ido para fazer as comparações. \ repetido esse processo até que a lista este#a ordenada.
21
:a#tage#s Y @ácil implementação9 Y 'equeno n"mero de movimentações9 Y *nteressante para arquivos pequenos
Desva#tage#s Y $ fato de arquivo #á estar ordenado não influencia em nada9 Y $rdem de complexidade quadrática9 Y Algoritmo não estável
7.% ;ui/<8ort Este é o algoritmo com mais eficácia na ordenação por comparação. 3este algoritmo será escol/ido um numero c/amado de piv[, a partir da% será ele organizara uma lista para que todos os n"meros que ven/am antes a ele se#am menores, e todos os que ven/am depois se#am maiores que ele. Ao termino desse processo o n"mero
22
23
Y Extremamente de uma pequena pil/a como mem0ria extra, Y -omplexidade n log n.
Desva#tage#s Y *mplementação dif%cil9 Y 3ão é estável.
24
=. etodologia dos Testes $s algoritmos de ordenação foram escritos na linguagem -]. $ sofare utilizado para edição e compilação do c0digo foi o icrosoft Disaul +tudio Express 7U67. 'ara realização dos testes em lotes foram utilizadas palavras armazenadas em um BistCstring=, que contem as informações para os testes) étodo de ser realizado, taman/o do vetor, performance de ordenação.
=.1 Resultados @oram testados os quatros métodos de ordenação, para método foi testado um taman/o diferente de vetor &6UU, 6UUU, 6UUUU, 6UUUUU( e para cada taman/o um tipo diferente &$rdenado -rescente em ordem alfaética(. 'ara o tipo Aleat0rio o teste foi realizado para V vetores diferentes mediante os taman/os, assim o resultado aqui apresentado é a média dos valores. ule+ort *nsert+ort OuicM+ort
25
>lasse orde#a()o using +Kstem9 using +Kstem.-ollections.Jeneric9 using +Kstem.ext9 namespace A'+$rdenacaoGeGados L class $rdenacao L <<etodos que seream sorescritos em cada classe especializada pulic virtual BistC+tring= ordenar&BistC+tring= lista( L return null9 N pulic virtual +tring nomeGa$rdenacao&( L return FF9 N N N
>lasse "ubble8ort
26
L for &int i > 69 i C lista.-ount9 i;;( L for &int # > U9 # C lista.-ount 1 69 #;;( L if &listaW#X.-ompareo&listaW# &listaW#X.-ompareo&listaW# ; 6X( >> 6( L string temp > listaW#X9 listaW#X > listaW# ; 6X9 listaW# ; 6X > temp9 N N N return lista9
27
using +Kstem.Binq9 using +Kstem.ext9 namespace A'+$rdenacaoGeGados L class *nsert+ort ) $rdenacao L <
28
listaW#X > listaW# 1 6X9 # > # 1 69 N listaW#X > escol/ido9 N return lista9 N N N
>lasse ;ui/<8ort using +Kstem9 using +Kstem.-ollections.Jeneric9 using +Kstem.ext9 namespace A'+$rdenacaoGeGados L class OuicM+ort ) $rdenacao
29
organizar&vetor, inicio, posicao'ivo 1 6(9 organizar&vetor, posicao'ivo ; 6, fim(9 N return vetor9 N < vetorWinicioX9 int i > inicio ; 6, f > fim9 /ile &i C> f( L if &vetorWiX.-ompareo&pivo( &vetorWiX.-ompareo&pivo( C> U(
i;;9 else if &pivo.-ompareo&vetorWfX( &pivo.-ompareo&vetorWfX( C U(
f119 else
30
N <
N <
31
static void ain&stringWX args( L < ne BistC$rdenacao=&(9 ordenacao.Add&ne ule+ort&((9 ordenacao.Add&ne OuicM+ort&((9 ordenacao.Add&ne *nsert+ort&((9 int escol/aGoenu >U9<
< ne BistCBistCstring==&(9 BistCBistC+tring== vetorpalavrasEmaral/adas > ne BistCBistCstring==&(9 <
32
BistC+tring= palavrasAleatoria > ne BistC+tring=&(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&FAF(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&F$F(9
palavrasAleatoria.Add&F-F(9
palavrasAleatoria.Add&F+F(9
palavrasAleatoria.Add&FGF(9
palavrasAleatoria.Add&FHF(9
palavrasAleatoria.Add&FEF(9
palavrasAleatoria.Add&FIF(9
palavrasAleatoria.Add&FJF(9
palavrasAleatoria.Add&F@F(9
palavrasAleatoria.Add&FHF(9
palavrasAleatoria.Add&F*F(9
palavrasAleatoria.Add&FOF(9
palavrasAleatoria.Add&FPF(9
palavrasAleatoria.Add&FBF(9
palavrasAleatoria.Add&FQF(9
33
palavrasAleatoria.Add&F-F(9
palavrasAleatoria.Add&F+F(9
palavrasAleatoria.Add&FGF(9
palavrasAleatoria.Add&FHF(9
palavrasAleatoria.Add&FEF(9
palavrasAleatoria.Add&FIF(9
palavrasAleatoria.Add&FJF(9
palavrasAleatoria.Add&F@F(9
palavrasAleatoria.Add&FHF(9
palavrasAleatoria.Add&F*F(9
palavrasAleatoria.Add&FOF(9
palavrasAleatoria.Add&FPF(9
palavrasAleatoria.Add&FBF(9
palavrasAleatoria.Add&FQF(9
palavrasAleatoria.Add&F3F(9
palavrasAleatoria.Add&F!F(9
palavrasAleatoria.Add&FRF(9
palavrasAleatoria.Add&F'F(9
palavrasAleatoria.Add&FSF(9
34
palavrasAleatoria.Add&FIF(9
palavrasAleatoria.Add&FJF(9
palavrasAleatoria.Add&F@F(9
palavrasAleatoria.Add&FHF(9
palavrasAleatoria.Add&F*F(9
palavrasAleatoria.Add&FOF(9
palavrasAleatoria.Add&FPF(9
palavrasAleatoria.Add&FBF(9
palavrasAleatoria.Add&FQF(9
palavrasAleatoria.Add&F3F(9
palavrasAleatoria.Add&F!F(9
palavrasAleatoria.Add&FRF(9
palavrasAleatoria.Add&F'F(9
palavrasAleatoria.Add&FSF(9
palavrasAleatoria.Add&FTF(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&FDF(9
palavrasAleatoria.Add&FF(9
palavrasAleatoria.Add&FAF(9
35
palavrasAleatoria.Add&FOF(9
palavrasAleatoria.Add&FPF(9
palavrasAleatoria.Add&FBF(9
palavrasAleatoria.Add&FQF(9 palavrasAleatoria.Add&FJiovaneF(9
palavrasAleatoria.Add&FTicardoF(9
palavrasAleatoria.Add&FJustavoF(9
palavrasAleatoria.Add&FEduardoF(9 < 6UU9 for &int indice > U9 indice C V9 indice;;( L /ile &vetorpalavrasEmaral/adasWindiceX.-ount C teste( L vetorpalavrasEmaral/adasWindiceX.AddTange&palavrasAleatoria(9
36
-onsole.PriteBine&Fvetor palavrasAleatoria LUN) L6NF, U, copiaDetorpalavrasEmaral/adasWUX.-ount(9 -onsole.PriteBine&Fvetor palavrasAleatoria LUN) L6NF, 6, copiaDetorpalavrasEmaral/adasW6X.-ount(9 -onsole.PriteBine&Fvetor palavrasAleatoria LUN) L6NF, 7, copiaDetorpalavrasEmaral/adasW7X.-ount(9 -onsole.PriteBine&Fvetor palavrasAleatoria LUN) L6NF, 8, copiaDetorpalavrasEmaral/adasW8X.-ount(9 -onsole.PriteBine&(9 trK L<
37
L < Gateime.3o9 < ordenacaoWescol/aGoenuX.ordenar&copiaDetorpalavrasEmaral/adasWiX(9 Gateime fim > Gateime.3o9 Gateime.3o 9 <
-onsole.PriteBine&(9 -onsole.PriteBine&F-om F;quantGe*tens3oDetor. F;quantGe*tens3oDetor.o+tring&( o+tring&( ;F
intes levou) LUN milessegundos F,fim.+utract&inicio((9 F,fim.+utract&inicio((9
-onsole.PriteBine&(9 quantGe*tens3oDetor quantGe*tens3oDetor Y> 6U9 N -onsole.PriteBine&(9 <<-onsole.PriteBine&Fempo <<-onsole.PriteBine&Fempo gasto para ordenar)
/ora)minuto)segundo.mile segundo F ; fim.+utract&inicio(. fim.+utract&inicio(.otalilliseconds otalilliseconds
38
L -onsole.PriteBine&F'recione um numero dentro do escopo F;erro(9 N <
copiaDetorpalavrasEmaral/adas.-lear&(9 N /ile &escol/aGoenu > (9 N N
N
39
1B. >o#/lus)o
Este traal/o possiilitou um aprofundamento sore os algoritmos de ordenação em como a análise do n"mero de atriuições, comparações e tempo de execução de forma em eficiente. 'elos testes executados pode1se concluir que) Dale a pena inserir a verificação de ordenação &/ouve troca( no algoritmo ule+ort9 3ão vale a pena usar o algoritmo *nsert+ort com elemento sentinela9 Dale a pena inserir uma verificação &in >> i( para evitar a troca, no método +elect+ort9 $ OuicM+ort é o algoritmo mais eficiente para ordenar vetores de grandes dimensões. Dale a pena usar os algoritmos simples até vetores de `U elementos, acima desse valor deve1se usar os algoritmos eficientes.As dificuldades encontradas foram devido ao fato /aver várias alterações no c0digo, implementação do *nser+ort com cursores e de gerar os gráficos com eficiência. A cominação entre a tecnologia disponiilizada pelo processamento paralelo e a eficiência dos algoritmos de ordenação produz algoritmos paralelos de ordenação comanto poder de computação.
40
11. "ibliogra*ia /ttp)<<.devmedia.com.rGE+E3D$BD*E3$;GE;+*+ q>GE+E3D$B D*E3$;GE;+*+EA;' EA;'ATA;A3B*+E;GE;'ET@$TA3-E;GE; ATA;A3B*+E;GE;'ET@$TA3-E;GE; ABJ$T*$+;GE;$TGE3Ajk$;GE;GAG$+5/l>pt1 ABJ$T*$+;GE;$TGE3Ajk$;GE ;GAG$+5/l>pt1 Tsource>lnmssa>Iei>GOt^!1 ?mJpeOqAT^VQg-Aved>U-AcOA!oAAi>68??i/>?8dpr>6 .devmedia.com.r
41
42
43