Ordeação (Parte 1) Prof. Túlio Toffolo http://www.toffolo.com.br BCC0 Aula 13 Algoritmos e Estruturas de Dados I
Critério de Ordeação Ordea-se de acordo com uma chave: typedef it TChave; typedef struct { TChave Chave; /* outros compoetes */ TItem;
Características Estabilidade: relativo à mauteção da ordem origial de ites de chaves iguais Ordeação itera: dados a serem ordeados cabem todos a memória pricipal. Pricípio: comparação x distribuição 3
Critério de Avaliação Sedo o úmero de registros o arquivo, as medidas de complexidade relevates são: Número de comparações C() etre chaves. Número de movimetações M() de ites 4
Outras Cosiderações O uso ecoômico da memória dispoível é um requisito primordial a ordeação itera. Métodos de ordeação i situ são os preferidos. Métodos i situ ão utilizam memória adicioal. Métodos que utilizam listas ecadeadas ão são muito utilizados. Métodos que fazem cópias dos ites a serem ordeados possuem meor importâcia. 5
Métodos Métodos a que estudaremos hoje: Bolha (BubbleSort) Seleção (SelectSort) Iserção (IsertSort) 6
ORDENAÇÃO DA BOLHA BUBBLESORT
Método Bolha Os elemetos vão borbulhado a cada iteração do método até a posição correta para ordeação da lista O método poderia parar quado ehum elemeto borbulhace/trocasse de posição Como os elemetos são trocados (borbulhados) frequetemete, há um alto custo de troca de elemetos 8
Método Bolha void Bolha (TItem* v, it ) { it i, j; TItem aux; for (i = 0; i < -1; i++) { for (j = 1; j < -i; j++) { if (v[j].chave < v[j-1].chave) { aux = v[j]; v[j] = v[j-1]; v[j-1] = aux; 9
Aálise de Complexidade M() = 3C() = O( ) Comparações C() Movimetações M() ) ( 1) ( 1) )( (0 1) ( 1 1) ( ) ( 0 0 0 0 O i i C i i i i = = + = = = = = = = 10
Ordeação por Bolha Vatages: Algoritmo simples Algoritmo estável Desvatages: O fato de o arquivo já estar ordeado ão ajuda reduzir o úmero de comparações (o custo cotiua quadrático), porém o úmero de movimetação cai a zero. Possível modificação a atual implemetação? 11
Método Bolha void Bolha (TItem* v, it ) { it i, j; TItem aux; for (i = 0; i < -1; i++) { for (j = 1; j < -i; j++) { if (v[j].chave < v[j-1].chave) { aux = v[j]; v[j] = v[j-1]; v[j-1] = aux; 1
Método Bolha Melhoria!!! void Bolha (TItem* v, it ) { it i, j, troca; TItem aux; for (i = 0; i < -1; i++) { troca = 0; for (j = 1; j < -i; j++) { if (v[j].chave < v[j-1].chave) { aux = v[j]; v[j] = v[j-1]; v[j-1] = aux; troca++; if (troca == 0) break; 13
ORDENAÇÃO POR SELEÇÃO SELECTSORT
Método Seleção Seleção do -ésimo meor (ou maior) elemeto da lista Troca do -ésimo meor (ou maior) elemeto com a - ésima posição da lista Uma úica troca por vez é realizada 15
Método Seleção void Selecao (TItem* v, it ) { it i, j, Mi; TItem aux; for (i = 0; i < - 1; i++) { Mi = i; for (j = i + 1 ; j < ; j++) if (v[j].chave < v[mi].chave) Mi = j; aux = v[mi]; v[mi] = v[i]; v[i] = aux; 16
Aálise de Complexidade ) ( 1) ( 1) )( (0 1) ( 1 1) ( ) ( 0 0 0 0 O i i C i i i i = = + = = = = = = = Comparações C() Movimetações M() M() = 3( 1) = O() 17
Ordeação por Seleção Vatages: Custo liear o tamaho da etrada para o úmero de movimetos de registros. É o algoritmo a ser utilizado para arquivos com registros muito grades (alto custo de movimetação). É muito iteressate para arquivos pequeos. Desvatages: O fato de o arquivo já estar ordeado ão ajuda em ada, pois o custo cotiua quadrático. O algoritmo ão é estável. 18
Método Seleção void Selecao (TItem* v, it ) { it i, j, Mi; TItem aux; for (i = 0; i < - 1; i++) { Mi = i; for (j = i + 1 ; j < ; j++) if (v[j].chave < v[mi].chave) Mi = j; aux = v[mi]; v[mi] = v[i]; v[i] = aux; 19
Método Seleção Melhoria! void Selecao (TItem* v, it ) { it i, j, Mi; TItem aux; for (i = 0; i < - 1; i++) { Mi = i; for (j = i + 1 ; j < ; j++) if (v[j].chave < v[mi].chave) Mi = j; if (i!= Mi) { aux = v[mi]; v[mi] = v[i]; v[i] = aux; 0
ORDENAÇÃO POR INSERÇÃO INSERTSORT
Método Iserção Algoritmo utilizado pelo jogador de cartas As cartas são ordeadas da esquerda para direita uma por uma. O jogador escolhe a seguda carta e verifica se ela deve ficar ates ou a posição que está. Depois a terceira carta é classificada, deslocado-a até sua correta posição O jogador realiza esse procedimeto até ordear todas as cartas Alto custo em remover uma carta de uma posição e colocá-la em outra quado a represetação é por arrajos
Método Iserção void Isercao (TItem* v, it ) { it i,j; TItem aux; for (i = 1; i < ; i++) { aux = v[i]; j = i - 1; while (j >= 0 && aux.chave < v[j].chave) { v[j + 1] = v[j]; j--; v[j + 1] = aux; 3
Método Iserção (com setiela) void Isercao (TItem* v, it ) { it i,j; for (i = -; i >= 0; i--) { v[] = v[i]; j = i + 1; while (v[].chave > v[j].chave) { v[j - 1] = v[j]; j++; v[j - 1] = v[] 4
Aálise de Complexidade Comparações C() No ael mais itero, a i-ésima iteração, o valor de C i é: melhor caso : C i () = 1 pior caso : C i () = i caso medio : C i () = 1/i (1 + +... + i) = (i+1)/ Assumido que todas as permutações de são igualmete prováveis o caso médio, temos: melhor caso : C() = (1 + 1 +... + 1) = - 1 pior caso : C() = (1 + +... + -1) = / - / caso medio : C() = ½ ( +... + ) = /4 + /4 1/ 5
Aálise de Complexidade Movimetações M() No ael mais itero, a i-ésima iteração, o valor de M i é: melhor caso : M i () = 0 pior caso caso medio : M i () = i : M i () = 1/i (0 + 1 + +... + i-1) = (i-1)/ Assumido que todas as permutações de são igualmete prováveis o caso médio, temos: melhor caso : M() = ( + +... + ) = - pior caso : M() = (+1 +... + +-1) = ( +3-4)/ caso medio : M() = ½ ( + 3 +... + ) = ( + )/ 6
Ordeação por Iserção O úmero míimo de comparações e movimetos ocorre quado os ites estão origialmete em ordem. O úmero máximo ocorre quado os ites estão origialmete a ordem reversa. É o método a ser utilizado quado o arquivo está quase ordeado. É um bom método quado se deseja adicioar us poucos ites a um arquivo ordeado, pois o custo é liear. O algoritmo de ordeação por iserção é estável. 7
Ordeação por Comparação Métodos simples: Adequados para pequeas etradas. Requerem O( ) comparações. Produzem programas pequeos (pouco código). 8
Ordeação por Comparação Métodos eficietes: Adequados para etradas maiores. Requerem O( log ) comparações. Usam meos comparações. As comparações são mais complexas os detalhes. Uma observação importate: Métodos simples são mais eficietes para pequeos arquivos. 9
Pergutas?
BUBBLESORT, SELECTSORT E INSERTSORT EXERCÍCIO
Exercício Dada a sequêcia de úmeros: 3 4 9 5 1 8 Ordee em ordem crescete utilizado os três algoritmos apredidos em sala (BubbleSort, SelectSort e IsertSort), apresetado a sequêcia dos úmeros a cada passo. 3