Bruo Hott Algortmos e Estruturas de Dados I DECSI UFOP Aula 10: Ordeação
O Crtéro de Ordeação Ordea-se de acordo com uma chave: typedef t TChave; typedef struct{ TChave chave; /* outros compoetes */ Item;
Característcas Establdade: relatvo à mauteção da ordem orgal de tes de chaves guas Um método de ordeação é estável se a ordem relatva dos tes com chaves guas ão se altera durate a ordeação. Ordeação tera: arquvo a ser ordeado cabe todo a memóra prcpal. Prcípo: comparação x dstrbução
Crtéro de Avalação Sedo o úmero de regstros o arquvo, as meddas de complexdade relevates são: Número de comparações C() etre chaves. Número de movmetações M() de tes
Outras Cosderações O uso ecoômco da memóra dspoível é um requsto prmordal a ordeação tera. Métodos de ordeação stu são os preferdos. Métodos que utlzam lstas ecadeadas ão são muto utlzados. Métodos que fazem cópas dos tes a serem ordeados possuem meor mportâca.
Métodos Bolha (BubbleSort) Seleção (SelectSort) Iserção (IsertSort)
Método Bolha Os elemetos vão borbulhado a cada teração do método até a posção correta para ordeação da lsta O método podera parar quado ehum elemeto borbulhasse/trocasse de posção Como os elemetos são trocados (borbulhados) frequetemete, há um alto custo de troca de elemetos
Método Bolha vod Bolha( Item* v, t ){ t, j; Item aux; for( = 0; < -1; ++ ){ for( j = 1; j < -; j++ ){ f( v[j].chave < v[j-1].chave ){ aux = v[j]; v[j] = v[j-1]; v[j-1] = aux;
Aálse de Complexdade Comparações - C() Movmetações M() M() - 3C() ) ( 1) ( 1) )( (0 1) ( 1 1) ( ) ( 0 0 0 0 O C
Ordeação por Bolha Vatages: Algortmo smples Algortmo estável Desvatages: O fato de o arquvo já estar ordeado ão ajuda reduzr o úmero de comparações (o custo cotua quadrátco), porém o úmero de movmetação ca a zero. Possível modfcação a atual mplemetação?
Método Bolha vod Bolha (Item* v, t ){ t, j, troca; Item aux; for( = 0; < -1; ++ ){ troca = 0; for( j = 1; j < -; j++ ){ f( v[j].chave < v[j-1].chave ){ aux = v[j]; v[j] v[j-1] = aux; troca = 1; = v[j-1]; f(troca == 0) break;
Método Seleção Seleção do -ésmo meor (ou maor) elemeto da lsta Troca do -ésmo meor (ou maor) elemeto com a -ésma posção da lsta Uma úca troca por vez é realzada
Método Seleção vod Selecao( Item* v, t ){ t, j, m; Item aux; for( = 0; < - 1; ++){ m = ; for(j = +1; j < ; j++) f( v[j].chave < v[m].chave) m = j; aux = v[m]; v[m] = v[]; v[] = aux;
Aálse de Complexdade Comparações C() Movmetações M() M() = 3(-1) ) ( 1) ( 1) )( (0 1) ( 1 1) ( ) ( 0 0 0 0 O C
Ordeação por Seleção Vatages: Custo lear o tamaho da etrada para o úmero de movmetos de regstros. É o algortmo a ser utlzado para arquvos com regstros muto grades. É muto teressate para arquvos pequeos. Desvatages: O fato de o arquvo já estar ordeado ão ajuda em ada, pos o custo cotua quadrátco. O algortmo ão é estável.
Método Seleção Melhora! vod Selecao(Item* v, t ){ t, j, m; Item aux; for( = 0; < -1; ++ ){ m = ; for( j = +1; j < ; j++ ) f( v[j].chave < v[m].chave) m = j; f(!= m ){ aux = v[m]; v[m] = v[]; v[] = aux;
Método Iserção Algortmo utlzado pelo jogador de cartas As cartas são ordeadas da esquerda para dreta uma por uma. O jogador escolhe a seguda carta e verfca se ela deve fcar ates ou a posção que está. Depos a tercera carta é classfcada, deslocado-a até sua correta posção O jogador realza esse procedmeto até ordear todas as cartas Alto custo em remover uma carta de uma posção e colocá-la em outra quado a represetação é por arrajos
Método Iserção vod Isercao( Item* v, t ){ t, j; Item aux; for( = 1; < ; ++ ){ aux = v[]; j = 1; whle( (j >= 0) && (aux.chave < v[j].chave) ){ v[j+1] = v[j]; j--; v[j+1] = aux;
Aálse de Complexdade Comparações C() No ael mas tero, a -ésma teração, o valor de C é: melhor caso: C () = 1 por caso: C () = caso medo: C () = 1/ (1 + +... + ) = (+1)/ Assumdo que todas as permutações de são gualmete prováves o caso médo, temos: melhor caso: C() = (1 + 1 +... + 1) = - 1 por caso: C() = (1 + +... + -1) = / - / caso medo: C() = ½ ( + 3 +... + ) = /4 + /4 1/
Aálse de Complexdade Movmetações C() No ael mas tero, a -ésma teração, o valor de C é: melhor caso: C () = 0 por caso: C () = caso medo: C () = 1/ (0 + 1 + +... + -1) = (-1)/ Assumdo que todas as permutações de são gualmete prováves o caso médo, temos: melhor caso: C() = ( + +... + ) = - por caso: C() = (+1 + + +... + +-1) = ( +3-4)/ caso médo: C() = ½ ( + 3 +... + ) = ( + )/
Ordeação por Iserção O úmero mímo de comparações e movmetos ocorre quado os tes estão orgalmete em ordem. O úmero máxmo ocorre quado os tes estão orgalmete a ordem reversa. É o método a ser utlzado quado o arquvo está quase ordeado. É um bom método quado se deseja adcoar us poucos tes a um arquvo ordeado, pos o custo é lear. O algortmo de ordeação por serção é estável.
Ordeação Itera Métodos smples: Adequados para pequeos arquvos. Requerem O(²) comparações. Produzem programas pequeos. Métodos efcetes: Adequados para arquvos maores. Requerem O( log ) comparações. Usam meos comparações. As comparações são mas complexas os detalhes. Métodos smples são mas efcetes para pequeos arquvos.