Ordeação: Itrodução e métodos elemetares Algortmos e Estruturas de Dados II
Ordeação Objetvo: Rearrajar os tes de um vetor ou lsta de modo que suas chaves estejam ordeadas de acordo com alguma regra Estrutura: typedef t chave_t; struct tem { ; chave_t chave; /* outros compoetes */ E X E M P L O E E L M O P X
Crtéros de Classfcação Localzação dos dados: Ordeação tera Todas os dados estão em memóra prcpal RAM Ordeação extera Memóra prcpal ão cabe todos os dados Dados armazeados em memóra secudára dsco 3
Crtéros de Classfcação Establdade: Método é estável se a ordem relatva dos regstros com a mesma chave ão se altera após a ordeação. Adams A Adams A Adams A Black B Smth A Smth A Brow D Washgto B Black B Jackso B Jackso B Jackso B Joes D Black B Washgto B Smth A Whte C Whte C Thompso D Wlso C Wlso C Washgto B Thompso D Brow D Whte C Brow D Joes D Wlso C Joes D Thompso D 4
Crtéros de Classfcação Adaptabldade: Um método é adaptável quado a sequeca de operações realzadas depede da etrada Um método que sempre realza as mesmas operações, depedede da etrada, é ão adaptável. 5
Crtéros de Classfcação Uso da memóra: I place: ordea sem usar memóra adcoal ou usado uma quatdade costate de memóra adcoal Algus métodos precsam duplcar os dados 6
Crtéros de Classfcação Movmetação dos dados: Dreta: estrutura toda é movda // struct tem a; // struct tem b; struct tem aux a; a b; b aux; Idreta: apeas as chaves são acessadas e poteros para as estruturas são rearrajados // struct tem *a; // struct tem *b; struct tem *aux *a; a b; b aux; 7
Crtéros de Avalação Seja o úmero de regstros em um vetor, cosdera-se duas meddas de complexdade: Número de comparações C etre as chaves Número de trocas ou movmetações M de tes #defe trocaa, B {struct tem c A; A B; B c; vod ordeastruct tem *v, t { t, j; for 0; < -; ++ { forj -; j > ; j-- { fv[j-].chave > v[j].chave /* comparações */ trocav[j-], v[j]; /* trocas */ 8
Ordeação por Seleção Procura o -ésmo meor elemeto do vetor Troca do -ésmo meor elemeto com o elemeto a -ésma posção Repete até ter colocado todos os elemetos em suas posções Elemetos são movmetados apeas uma vez 9
Ordeação por Seleção vod selecaostruct tem *v, t { t, j, m; for 0; < - ; ++ { m ; forj + ; j < ; j++ { fv[j].chave < v[m].chave m j; trocav[], v[m]; E X E M P L O E X E M P L O E E X M P L O E E L M P X O E E L M P X O E E L M O X P E E L M O P X E E L M O P X 0
Ordeação por Seleção: Complexdade Comparações C: 0 0 0 0 C Movmetações M: O 3 M
Ordeação por Seleção Vatages: Custo lear o tamaho da etrada para o úmero de movmetos de regstros a ser utlzado quado há regstros muto grades Desvatages: Não adaptável Não mporta se o arquvo está parcalmete ordeado Algortmo ão é estável
Ordeação por Iserção Algortmo utlzado pelo jogador de cartas Jogador matém as cartas em sua mão ordeadas Quado compra ou recebe uma ova carta, o jogador ecotra qual posção ela deve ocupar em sua mão Implemetação para vetores: Matemos os elemetos etre zero e - ordeados Note que o arrajo etre formado por um elemeto está ordeado, por defção Achamos a posção do -ésmo elemeto e sermos ele etre os - que já estavam ordeados O programa repete esse passo até ordear todos os elemetos 3
Método Iserção 4
Ordeação por Iserção vod sercaostruct tem *v, t { t, j; struct tem aux; for ; < ; ++ { forj ; j > 0; k-- { fv[j-].chave > v[j].chave { trocav[j-], v[j]; E X E M P L O E X E M P L O E E X M P L O E E M X P L O E E M P X L O E E L M P X O E E L M O P X 5
Ordeação por Iserção Melhorado vod sercaostruct tem *v, t { t, j; struct tem aux; for ; < ; ++ { aux v[]; j - ; whlej > 0 && aux.chave < v[j].chave { v[j + ] v[j]; j--; v[j + ] aux; E X E M P L O E X E M P L O E E X M P L O E E M X P L O E E M P X L O E E L M P X O E E L M O P X 6
Ordeação por Iserção: Complexdade Comparações C: Ael tero: -ésma teração, valor de C melhor caso: C por caso: C caso médo: C + + 3 +... + / C k k + + Para o caso médo, assummos que todas as permutações de etrada são gualmete prováves. 7
Ordeação por Iserção: Complexdade Comparações C: Ael extero: Complexdade total: Melhor caso tes já estão ordeados C 8 Melhor caso tes já estão ordeados Por caso tes em ordem reversa: O C O C
Ordeação por Iserção: Complexdade Comparações C: Caso médo: + + + C O + + 9 4 4 4 O + +
Ordeação por Iserção: Exemplos Melhor Caso: 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 Por Caso: 6 5 4 3 5 6 4 3 4 5 6 3 3 4 5 6 3 4 5 6 3 4 5 6 0
Ordeação por Iserção Vatages: Laço tero é efcete, serção é adequado para ordear vetores pequeos É o método a ser utlzado quado o arquvo está quase ordeado É um bom método quado se deseja adcoar poucos tes a um arquvo ordeado, pos o custo é lear O algortmo de ordeação por serção é estável Desvatages: Número de comparações tem crescmeto quadrátco Alto custo de movmetação de elemetos o vetor
Ordeação pelo Método da Bolha Idea Passa o arquvo e troca elemetos adjacetes que estão fora de ordem Repete esse processo até que o arquvo esteja ordeado Algortmo Compara dos elemetos adjacetes e troca de posção se estverem fora de ordem Quado o maor elemeto do vetor for ecotrado, ele será trocado até ocupar a últma posção Na seguda passada, o segudo maor será movdo para a peúltma posção do vetor, e assm sucessvamete
Ordeação pelo Método da Bolha E X E M P L O E E X M P L O E E M X P L O E E M P X L O E E M P L X O E E M P L O X E E M P L O X E E M P L O X E E M L P O X E E M L P O X ª passada ª passada 3
Ordeação pelo Método da Bolha vod bolhastruct tem *v, t { t, j; for 0; < -; ++ { forj ; j < -; j++ { fv[j].chave < v[j-].chave trocav[j-], v[j]; 4
Ordeação pelo Método da Bolha vod bolhastruct tem *v, t { t, j; for 0; < -; ++ { forj ; j < -; j++ { fv[j].chave < v[j-].chave trocav[j-], v[j]; E X E M P L O E E L M O P X E E M P L O X E E L M O P X E E M L O P X E E L M O P X E E L M O P X E E L M O P X 5
Ordeação pelo Método da Bolha: Complexdade vod bolhastruct tem *v, t { t, j; for 0; < -; ++ { forj ; j < -; j++ { fv[j].chave < v[j-].chave trocav[j-], v[j]; 6 0 0 0 0 0 O C j
Ordeação pelo Método da Bolha: Complexdade Movmetações M: Por caso elemetos em ordem decrescete: M 3 3 3 O 0 j 0 7
Ordeação pelo Método da Bolha Vatages Algortmo smples Algortmo estável Desvatages Não adaptável Mutas trocas de tes 8
Exercícos. Dê um exemplo de um vetor com N elemetos que maxmza o úmero de vezes que o mímo é atualzado o método de ordeação seleção.. Mostre um exemplo de etrada que demostra que o método de ordeação seleção ão é estável. 3. O método da bolha ão é adaptável, altere o códgo para que ele se tore adaptável. 4. Qual dos métodos: bolha, serção e seleção executa meos comparações para um vetor de etrada cotedo valores dêtcos. 9
Varação Bolha: Ordeação Par-Ímpar vod ParImparstruct tem *v, t { t ordeado 0; whle!ordeado { ordeado ; fort 0; < -; + fv[] > v[+] { trocav[], v[+]; ordeado 0; fort 0; < -; + fa[] > a[+] { trocav[], v[+]; ordeado 0; 30
Vsualzação de Algortmos de Ordeação http://www.sortg-algorthms.com 3