Aula 3 - Métodos_de_Ordenação

4
8/19/2019 Aula 3 - Métodos_de_Ordenação http://slidepdf.com/reader/full/aula-3-metodosdeordenacao 1/4 CLASSIFICAÇÃO E PESQUISA Métodos de Ordenação Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma ordem ascendente ou descendente, com o objetivo de facilitar a recuperação posterior de alguma informação do conjunto ordenado. A ordenação é a base na qual muitos algoritmos são construídos. Entendendo-a, tem-se conecimento para resolver outros problemas. A ordenação aparece em muitos problemas na pr!tica, e é o problema mais estudado em "i#ncia da "omputação. $rovavelmente devido aos computadores gastarem mais tempo ordenando do que fa%endo qualquer outra coisa. Os principais algoritmos de ordenação podem ser classificados em& Ordenação por inserção - 'nserção direta - 'ncremento decrescente ()ell sort* Ordenação por troca - +étodo da bola (bubble sort* - +étodo da troca e partição (quicsort* Ordenação por seleção - )eleção direta - )eleção em !rvore (eapsort* Ordenação por intercalação - +erge)ort Ordenação por Inserção Esse algoritmo é bastante simples e eficiente para uma quantidade pequena de elementos. A idéia de funcionamento é semelante ao ordenamento de cartas de baralo na mão de um jogador. A mão esquerda começa va%ia e a mão direita insere uma carta de cada ve% na posição correta. Ao final, quando todas as cartas foram inseridas, elas j! estão ordenadas. $ara encontrar, durante a inserção, a posição correta para um valor, compara-se este valor um-a-um com as cartas j! na mão esquerda, até encontrarmos a posição correta. $ossui baia efici#ncia. /esse método o vetor a ser ordenado é dividido em dois segmentos& o primeiro com os elementos j! ordenado e o seguinte com o restante dos elementos ainda não ordenados. Algorito! - o primeiro elemento é considerado no primeiro segmento (o j! ordenado*0 - retirar o primeiro elemento do segmento desordenado e inseri-lo no segmento ordenado, j! na sua devida posição0 - repetir o processo para todos os elementos do vetor. /este algoritmo não ! necessidade de utili%ação de nenuma estrutura de dados etra, além do pr1prio vetor inicial com os valores. "onsidere que os n2meros a serem ordenados estão arma%enados num vetor. O algoritmo de ordenação por inserção tem compleidade proporcional a n 3 no pior caso, onde n é o n2mero de elementos a serem ordenados. O algoritmo de ordenação por seleção (negrito* é apresentado no c1digo em " abaio.

Transcript of Aula 3 - Métodos_de_Ordenação

Page 1: Aula 3 - Métodos_de_Ordenação

8/19/2019 Aula 3 - Métodos_de_Ordenação

http://slidepdf.com/reader/full/aula-3-metodosdeordenacao 1/4

CLASSIFICAÇÃO E PESQUISA

Métodos de Ordenação

Ordenar corresponde ao processo de rearranjar um conjunto de objetos em umaordem ascendente ou descendente, com o objetivo de facilitar a recuperação posterior dealguma informação do conjunto ordenado. A ordenação é a base na qual muitos algoritmossão construídos. Entendendo-a, tem-se con ecimento para resolver outros problemas. Aordenação aparece em muitos problemas na pr!tica, e é o problema mais estudado em"i#ncia da "omputação. $rovavelmente devido aos computadores gastarem mais tempoordenando do que fa%endo qualquer outra coisa.

Os principais algoritmos de ordenação podem ser classificados em&− Ordenação por inserção

- 'nserção direta- 'ncremento decrescente () ell sort*

− Ordenação por troca - +étodo da bol a (bubble sort*- +étodo da troca e partição (quic sort*

− Ordenação por seleção - )eleção direta- )eleção em !rvore ( eapsort*

− Ordenação por intercalação

- +erge)ort

Ordenação por Inserção

Esse algoritmo é bastante simples e eficiente para uma quantidade pequena deelementos. A idéia de funcionamento é semel ante ao ordenamento de cartas de baral o namão de um jogador. A mão esquerda começa va%ia e a mão direita insere uma carta decada ve% na posição correta. Ao final, quando todas as cartas foram inseridas, elas j! estãoordenadas. $ara encontrar, durante a inserção, a posição correta para um valor, compara-seeste valor um-a-um com as cartas j! na mão esquerda, até encontrarmos a posição correta.$ossui bai a efici#ncia.

/esse método o vetor a ser ordenado é dividido em dois segmentos& o primeiro comos elementos j! ordenado e o seguinte com o restante dos elementos ainda não ordenados.

Algorit o! - o primeiro elemento é considerado no primeiro segmento (o j! ordenado*0- retirar o primeiro elemento do segmento desordenado e inseri-lo no segmentoordenado, j! na sua devida posição0- repetir o processo para todos os elementos do vetor.

/este algoritmo não ! necessidade de utili%ação de nen uma estrutura de dados e tra,além do pr1prio vetor inicial com os valores. "onsidere que os n2meros a serem ordenadosestão arma%enados num vetor. O algoritmo de ordenação por inserção tem comple idade

proporcional a n 3 no pior caso, onde n é o n2mero de elementos a serem ordenados.O algoritmo de ordenação por seleção (negrito* é apresentado no c1digo em "

abai o.

Page 2: Aula 3 - Métodos_de_Ordenação

8/19/2019 Aula 3 - Métodos_de_Ordenação

http://slidepdf.com/reader/full/aula-3-metodosdeordenacao 2/4

4include <stdio.h>#include <stdlib.h>#define TAM 6

int ord_insercao ( int v[TAM]){ int i, j, x; for (j = 1; j < TAM; j++) { x = v[j]; for (i = j-1; i = ! "" v[i] x; --i) v[i+1] = v[i]; v[i+1] = x; ##

void main(){int vetor[TAM] i ! au" os$for(i%&$i<TAM$i'')

au"%rand()$os%ord insercao (vetor)$

E"e plo! Ordenar o vetor A 5 67,3,8,9,:,;<. ("ormen, 3==:*

0 1 2 3 4 57 3 8 9 : ;

0 1 2 3 4 53 7 8 9 : ;

0 1 2 3 4 53 8 7 9 : ;

0 1 2 3 4 53 8 7 9 : ;

0 1 2 3 4 5: 3 8 7 9 ;

0 1 2 3 4 5

: 3 ; 8 7 9

Page 3: Aula 3 - Métodos_de_Ordenação

8/19/2019 Aula 3 - Métodos_de_Ordenação

http://slidepdf.com/reader/full/aula-3-metodosdeordenacao 3/4

E"erc#cios!

:. >sando a algoritmo de ordenação por inserção, ilustre a ordenação no vetor 5 6;:, 8:,7?, 39, 8:, 7@<. ("ormen, 3==:* uantas trocas foram efetuadasB

3. Ceescreva o procedimento de ordenação por inserção para ordenar em ordemdecrescente, em ve% da ordem crescente. ("ormen, 3==:*

S$ellSort

O método de ordenação ShellSort , ou Ordenação por Diminuição de Elementos, foiinventando por Donald ) ell em :?7?. O algoritmo reali%a a ordenação passando v!riasve%es pelo vetor dividindo em vetores cada ve% menores, e ao fim nos menores vetores éaplicado o método de ordenação por inserção .

Este algoritmo é baseado em trocas. O algoritmo usa uma vari!vel au iliar denominada distância de comparação (h). O valor de h é iniciali%ado com um valor

pr1 imo de n 3. A troca é feita entre elementos que estão distanciados h posiçFes (eestiverem fora de ordem*. Ap1s de fa%er todas as trocas de elementos cuja distancia é h, ovalor h deve ser redu%ido&

5 3 ou 5 ;O algoritmo é repetido até que a distGncia de comparação h seja igual a um ( h 5 :*. $ara h 5: (ultima passada* é e ecutado o algoritmo de inserção .

#include <stdio.h>#include <stdlib.h>#define TAM 6

int $%e&&_$ort( int '[TAM]) {int j, i, %, x;for ( % = TAM ; % =1; % =% ) {

for ( i = %; i < TAM; i++) {x = '[i];for ( j = i; j = %; j =j-%) {

if ( '[j - %] x) '[j] = '[j-%];

e&se *rea ;#

'[j] = x;#

##

main(){int vetor[TAM] i ! au" os$for(i%&$i<TAM$i'')

au"%rand()$*hell *ort (vetor)$

Page 4: Aula 3 - Métodos_de_Ordenação

8/19/2019 Aula 3 - Métodos_de_Ordenação

http://slidepdf.com/reader/full/aula-3-metodosdeordenacao 4/4