Ordeação David Meotti Algoritmos e Estruturas de Dados II DIf UFPR
Critério de Ordeação Ordea-se de acordo com uma chave: typedef it ChaveTipo; typedef struct ChaveTipo Chave; /* outros compoetes */ Item; David Meotti Algoritmos e Estruturas de Dados II
Características Estabilidade: relativo à mauteção da ordem origial de ites de chaves iguais Um método de ordeação é estável se a ordem relativa dos ites com chaves iguais ão se altera durate a ordeação. Ordeação itera: arquivo a ser ordeado cabe todo a memória pricipal. Pricípio: comparação x distribuição David Meotti Algoritmos e Estruturas de Dados II
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 David Meotti Algoritmos e Estruturas de Dados II
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 que utilizam listas ecadeadas ão são muito utilizados. Métodos que fazem cópias dos ites a serem ordeados possuem meor importâcia. David Meotti Algoritmos e Estruturas de Dados II
Métodos Bolha (BubbleSort) Seleção (SelectSort) Iserção (IsertSort) David Meotti Algoritmos e Estruturas de Dados II
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 David Meotti Algoritmos e Estruturas de Dados II
Método Bolha void Bolha (Item* v, it ) it i, j; Item 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; // if David Meotti Algoritmos e Estruturas de Dados II
Aálise de Complexidade Comparações C() Movimetações M() David Meotti Algoritmos e Estruturas de Dados II
David Meotti Algoritmos e Estruturas de Dados II Aálise de Complexidade Comparações C() Movimetações M() ) ( 3 ) ( C M ) ( 1) ( 1) )( (0 1) ( 1 1) ( ) ( 0 0 0 0 O i i C i i i i
Vatages: Ordeação por Bolha 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? David Meotti Algoritmos e Estruturas de Dados II
Método Bolha void Bolha (Item* v, it ) it i, j, troca; Item 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 = 1; // if if (troca == 0) break; David Meotti Algoritmos e Estruturas de Dados II
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 David Meotti Algoritmos e Estruturas de Dados II
Método Seleção void Selecao (Item* v, it ) it i, j, Mi; Item 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; David Meotti Algoritmos e Estruturas de Dados II
Aálise de Complexidade Comparações C() Movimetações M() David Meotti Algoritmos e Estruturas de Dados II
David Meotti Algoritmos e Estruturas de Dados II Aálise de Complexidade Comparações C() Movimetações M() ) ( 1) ( 1) )( (0 1) ( 1 1) ( ) ( 0 0 0 0 O i i C i i i i 1) 3( ) ( M
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. É 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. David Meotti Algoritmos e Estruturas de Dados II
Método Seleção Melhoria! void Selecao (Item* v, it ) it i, j, Mi; Item 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; David Meotti Algoritmos e Estruturas de Dados II
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 David Meotti Algoritmos e Estruturas de Dados II
Método Iserção void Isercao (Item* v, it ) it i,j; Item 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; David Meotti Algoritmos e Estruturas de Dados II
Método Iserção (com setiela) void Isercao (Item* 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[] David Meotti Algoritmos e Estruturas de Dados II
Aálise de Complexidade Comparações C() Movimetações M() David Meotti Algoritmos e Estruturas de Dados II
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() = ½ ( + 3 +... + ) = /4 + /4 1/ David Meotti Algoritmos e Estruturas de Dados II
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 : M i () = i caso medio : 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 +... + ) = ( + )/ David Meotti Algoritmos e Estruturas de Dados II
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. David Meotti Algoritmos e Estruturas de Dados II
Ordeação Itera Classificação dos métodos de ordeação itera: Métodos simples: Adequados para pequeos arquivos. Requerem O( ) comparações. Produzem programas pequeos. Métodos eficietes: Adequados para arquivos maiores. Requerem O( log ) comparações. Usam meos comparações. As comparações são mais complexas os detalhes. Métodos simples são mais eficietes para pequeos arquivos. David Meotti Algoritmos e Estruturas de Dados II