Vous êtes sur la page 1sur 25

Aula 01: Mtodos de ordenao elementares

CCF130

Prof. Larcio Baldochi

Contedo

Mtodos de ordenao elementares


Insero direta Seleo direta Troca

Bubble sort

Insero direta

Ordenar um arquivo pela insero de registros no lugar correto 25 25 25 25 12 12 12 12 57 57 48 37 25 25 25 25 48 48 57 48 37 37 37 33 37 37 37 57 48 48 48 37 12 12 12 12 57 57 57 48 92 92 92 92 92 92 86 57 86 86 86 86 86 86 92 86 33 33 33 33 33 33 33 92

Insero direta

Algoritmo bsico

Repita i, de 1 at tamanho do arquivo z = elemento da vez Localiza a posio da insero entre i-1 e 0 Desloca elementos 1 posio direita Insere z 25 57 48 37 12 92 86 33 25 57 48 37 12 92 86 33 25 48 57 37 12 92 86 33 25 37 48 57 12 92 86 33 12 25 37 48 57 92 86 33 12 25 37 48 57 92 86 33 12 25 37 48 57 86 92 33 12 25 33 37 48 57 86 92

Insero direta

Exerccio

Implemente a funo em C equivalente, tal que o prottipo seja

void insertsort (int x[], int tam)

Insero direta

Possvel implementao

25 25 25 25 12 12 12 12

57 57 48 37 25 25 25 25

48 48 57 48 37 37 37 33

37 37 37 57 48 48 48 37

12 12 12 12 57 57 57 48

92 92 92 92 92 92 86 57

86 86 86 86 86 86 92 86

33 33 33 33 33 33 33 92

void insertSort (int x[], int tam) { int i, j, z; for (i = 1; i < tam; i++) { z = x[i]; for (j = i - 1; (j >= 0) && (z < x[j]); j--) x[j + 1] = x[j]; x[j + 1] = z; } }

Exerccio 1

Ordene o vetor a seguir pelo mtodo da insero direta e verifique o nmero de deslocamentos necessrios 5 4 3 2 1

Exerccio 1 (implementao)

Implemente um programa em linguagem C que leia um vetor de at 20 inteiros. O vetor deve ento ser passado como parmetro para a funo insertSort, que deve orden-lo segundo o mtodo da insero direta. Finalmente, o programa deve imprimir o vetor ordenado.

Seleo direta

Selecionar o menor elemento, e coloc-lo no final dos elementos ordenados 25 12 12 12 12 12 12 12 12 57 57 25 25 25 25 25 25 25 48 48 48 33 33 33 33 33 33 37 37 37 37 37 37 37 37 37 12 25 57 57 48 48 48 48 48 92 92 92 92 92 92 57 57 57 86 86 86 86 86 86 86 86 86 33 33 33 48 57 57 92 92 92

Seleo direta

Algoritmo bsico

Repita i, de 0 at tamanho do arquivo 1 k = menor elemento entre i e o final do arquivo p = posio do elemento k trocar elemento da pos i com elemento da pos p 25 12 12 12 12 12 12 12 12 57 57 25 25 25 25 25 25 25 48 48 48 33 33 33 33 33 33 37 37 37 37 37 37 37 37 37 12 25 57 57 48 48 48 48 48 92 92 92 92 92 92 57 57 57 86 86 86 86 86 86 86 86 86 33 33 33 48 57 57 92 92 92

Seleo direta

Exerccio

Implemente a funo em C equivalente, tal que o prottipo seja

void selectsort (int x[], int tam)

Seleo direta

Possvel implementao
void selectSort (int x[], int tam){ int i, j, z, p; for (i = 0; i < tam-1; i++) { p = i; for (j = i + 1; j <= tam; j++) if (x[j] < x[p]) p = j; 25 57 48 37 if (p != i) { 12 57 48 37 z = x[p]; 12 25 48 37 x[p] = x[i]; 12 25 33 37 12 25 33 37 x[i] = z; 12 25 33 37 } 12 25 33 37 } 12 25 33 37 }

12 25 57 57 48 48 48 48 12 25 33 37 48

92 92 92 92 92 92 57 57 57

86 86 86 86 86 86 86 86 86

33 33 33 48 57 57 92 92 92

Exerccio 2

Ordene o vetor a seguir pelo mtodo da seleo direta e verifique o nmero de deslocamentos necessrios

1 troca = 2 deslocamentos

Exerccio 2 (implementao)

Implemente um programa em linguagem C que leia um vetor de at 20 inteiros. O vetor deve ento ser passado como parmetro para a funo selectSort, que deve orden-lo segundo o mtodo da seleo direta. Finalmente, o programa deve imprimir o vetor ordenado.

Variaes

Realizando algumas modificaes nos algoritmos de insero e seleo diretas, obtemos algoritmos mais eficientes

O Shellsort uma variante da insero direta O Heapsort uma variante da seleo direta

Bubble Sort
Mtodo de ordenao por troca (assim como o Quicksort) Idia bsica

Fazer os mais leves borbulharem para cima

Um dos algoritmos de ordenao menos eficientes Implementao

Vrias passagens pelo arquivo, trocando registros fora de lugar

Bubble Sort
25 57 48 37 12 92 86 33 25 57 57 48 57 37 57 12 57 92 92 86 92 33 25 48 37 12 57 86 33 92

Bubble Sort
25 48 37 12 57 86 33 92 25 48 48 37 48 12 48 57 57 86 86 33 25 37 12 48 57 33 86 92

Bubble Sort
25 25 12 12 12 12 12 37 12 25 25 25 25 25 12 37 37 33 33 33 33 48 48 33 37 37 37 37 57 33 48 48 48 48 48 33 57 57 57 57 57 57 86 86 86 86 86 86 86 92 92 92 92 92 92 92

Bubble Sort

Algoritmo bsico

Repita i, de 0 at tamanho do arquivo Repita j, de 0 at tam-i Se x[j] > x[j+1] troca elementos de posio 25 25 12 12 12 12 12 37 12 25 25 25 25 25 12 37 37 33 33 33 33 48 48 33 37 37 37 37 57 33 48 48 48 48 48 33 57 57 57 57 57 57 86 86 86 86 86 86 86 92 92 92 92 92 92 92

Bubble Sort

Exerccio

Implemente a funo em C equivalente, tal que o prottipo seja

void bubble (int x[], int n)

Bubble Sort

Ooops!

Espere...

25 25 12 12 12 12 12

37 12 25 25 25 25 25

12 37 37 33 33 33 33

48 48 33 37 37 37 37

57 33 48 48 48 48 48

33 57 57 57 57 57 57

86 86 86 86 86 86 86

92 92 92 92 92 92 92

Passos desnecessrios. O arquivo j est ordenado nesse ponto

Bubble Sort

Algoritmo bsico modificado

Repita i, de 0 at tamanho do arquivo ou no haja troca Repita j, de 0 at tam-i Se x[j] > x[j+1] troca elementos de posio

Bubble Sort

Anlise de desempenho

H n-1 passos e n-1 comparaes por passo Total de comparaes


(n-1)*(n-1) = n2 - 2n + 1 Complexidade de ordem quadrtica

Dobrar tamanho -> quadripla tempo de execuo

Exerccio 3 (implementao)

Implemente um programa em linguagem C que leia um vetor de at 20 inteiros. O vetor deve ento ser passado como parmetro para a funo BubleSort, que deve orden-lo segundo o algoritmo da bolha. Finalmente, o programa deve imprimir o vetor ordenado.

Vous aimerez peut-être aussi