apresentação de métodos de ordenação

18
IFMT - CUIABÁ 1 Ordenação Alberto Sales

Upload: albertosales

Post on 13-Sep-2015

216 views

Category:

Documents


0 download

DESCRIPTION

introdução a métodos de ordenação em vetores

TRANSCRIPT

  • IFMT - CUIAB 1

    Ordenao

    Alberto Sales

  • 2Mtodos de Ordenao: Trocas Seja L = 0, 1, 2, , n1 uma lista cujos itens aparecem

    numa ordem aleatria.

    A ordenao o processo em que se determina uma permutao, (0), (1), (2), , (n1), dos ndices de L tal que (0) (1) (2) (n1).

    ORDENAOPORTROCAS(mtododabolha) Talvez a estratgia mais simples para ordenar os itens de uma

    lista seja comparar pares de itens consecutivos e permut-los, caso estejam fora de ordem.

    Se a lista for assim processada, sistematicamente, da esquerda para a direita, um item mximo ser deslocado para a ltima posio da lista.

  • 3Mtodos de Ordenao Exemplo:

    medida em que a lista vai sendo processada, cada nmero vai sendo deslocado para a direita, at que seja encontrado outro maior.

  • 4Mtodos de Ordenao: Bolha Exemplo:

    Em cada fase desse mtodo, um item de maior valor deslocado para sua posio definitiva na lista ordenada. Ento, se uma lista tem n itens, aps a primeira fase haver n1 itens a ordenar.

    Usando a mesma estratgia, aps a segunda fase, termos n2 itens, depois n3 e assim sucessivamente at que reste um nico item.

  • 5Mtodos de Ordenao: BolhaExemplo: Veja agora a ordenao completa de uma lista pelo Mtodo da bolha. A varivel i indica a fase da ordenao e j indica a posio do par de itens consecutivos que sero comparados e, eventualmente, permutados.

    Note que na ltima fase a lista j est ordenada mas, mesmo assim, uma ltima comparao precisa ser feita para que isso seja confirmado

  • 6Mtodos de Ordenao: Bolha Se considerarmos os nmeros maiores como mais pesados e

    os menores como mais leves, veremos que, durante a ordenao por esse mtodo, os nmeros mais pesados "descem" rapidamente para o "fundo" do vetor;

    Enquanto que os nmeros mais leves "sobem" lentamente para a "superfcie". Os nmeros pesados descem como pedras e os leves sobem como bolhas21 de ar.

  • 7Mtodos de Ordenao: Bolha

    Ordenao por trocas.void trocas(int v[], int n) {

    int i, j;for(i=1; i

  • 8Mtodos de Ordenao: Bolha Anlise da ordenao por trocas

    Analisando a rotina trocas(), verificamos que o nmero total de comparaes realizadas

    (n1)+(n2)+(n3)++2+1 = (n2n), ou seja, a sua complexidade de tempo O(n2).

    Como a cada comparao corresponde uma troca em potencial, no pior caso, isto , quando o vetor estiver em ordem decrescente, sero realizadas no mximo (n2n) trocas.

    Exerccio 1. Simule a execuo da funo trocas(), no estilo do exemploda ltima lista, para ordenar a lista L = {92, 80, 71, 63, 55,

    41, 39, 27, 14} Exerccio 2.

    Adapte a funo trocas() de modo que o vetor seja ordenado de forma decrescente.

  • 9Mtodos de Ordenao: Seleo

    Aestratgiabsicadessemtodo,emcadafase,selecionarummenoritemaindanoordenadoepermutlocomaquelequeocupaasuaposionaseqnciaordenada.

    Oobjetivosempreprocuraromenorelementodovetoreinserilonoinciodovetor. Procuramosomenorvalordovetorecolocamoseleemvetor[1].

    Procuramosomenorvalordovetorexcluindoojcolocadoecolocamoseleemvetor[2].

    ...todoovetorordenado.

  • 10

    Mtodos de Ordenao: Seleo

    Maisprecisamente,issopodeserdescritoassim: Paraordenarumaseqncia ,selecioneumavalortalque=min{i,i+1,...,n1},permuteoselementosiee,sei+1

  • 11

    Mtodos de Ordenao: Seleo

    Executandosempreapartirdoltimoelementoreordenado(apartirdoi),oprogramaprocuraomenorelementonovetoreosubstituepeloelementoiatual.

    Exemplo1

    1. for( i = 1; i< tamanho; i++ ) { 2. minimo = i;3. for( j = i+1; j < = tamanho){4. if(vetor[j] < vetor[minimo])5. minimo = j;6. }8. temp = vetor[i]9. vetor[i] = vetor[minimo]10. vetor[minimo] = temp11. }

  • 12

    Mtodos de Ordenao: Seleo

    Ordenaodaseqncia 46,55,59,14,38,27usandooMtododaSeleo.

    Fig1.0 Noteque,emcadafase,umvalorapropriadoparak

    escolhidoeositensiesopermutados.Particularmentena4afase,comoosvaloresdeieksoiguais,apermutaonoserianecessria.

  • 13

    Mtodos de Ordenao: Seleo

    Oqueaindanoestmuitoevidentecomoovalordekescolhidoemcadafase.

    Paraisso,vamoscodificarafunoindmin(v,i,n),quedevolveondicedeumitemmnimodentrodaseqncia vi,vi+1,...,vn1.

    Aestratgiaadotadasupequeoitemviomnimoeentoocomparacomvi+1,vi+2,...atquenohajamaisitensouentoqueumitemmenorvksejaencontrado.

    Nessecaso,vkpassaaseromnimoeoprocessocontinuaanalogamente.

  • 14

    Mtodos de Ordenao: Seleo Selecionandoumitemmnimonumaseqncia.

    Inicialmente,oitemv0assumidocomoomnimo(k=0). Entov0comparadoaosdemaisitensdaseqnciaatque

    v3encontrado. Comov3

  • 15

    Mtodos de Ordenao: Seleo Exemplo2:Selecionandoumitemmnimo.

    intindmin(intv[],inti,intn){intj,k=i;for(j=i+1;jv[j])k=j;

    returnk;}

    Exemplo. Ordenao por seleo.void selecao(int v[], int n) {

    int i, k, x;for(i=0; i

  • 16

    Mtodos de Ordenao: SeleoAnlisedaOrdenaoporSeleo:

    Analisandoarotinaselecao(),constatamosqueelarealizaomesmonmerodecomparaesquearotinatrocas(),ouseja,(n1)+(n2)++2+1=(n2n).

    Entretanto,comoasubseqnciaaordenardiminuideumitemacadatrocafeita,temosqueonmeromximodetrocas(semcontarcomafunoindmin())naselecao()n1;umnmeroconsideravelmentemenordoqueaqueleencontradoparaarotinatrocas().

  • 17

    Mtodos de Ordenao: Seleo Exerccio1.Simuleaexecuodafunoselecao(),conforme

    noexemploFig1.0,paraordenaralistaL={82,50,71,63,85,43,39,97,14}

    Exerccio2.Codifiqueafunoselecao()semusarafunoindmin(),ouseja,embutindoalgicadessafunodiretamentenocdigodaselecao().

    Exerccio3.Adapteafunoselecao()paraordenarumvetordestrings.

  • Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18