Anda di halaman 1dari 15

Mtodos de Ordenao

Insero Direta e Bubble Sort

Profa. Ms. Larissa Pavarini da Luz


larissapavarini@yahoo.com.br

Introduo Conceitos Bsicos


Ordenao o processo pelo qual um conjunto de dados similares colocado em ordem crescente. Ordenao interna a ordenao de um conjunto de dados contido inteiramente na memria principal. Ordenao externa, os dados no esto totalmente contidos na memria. Chave de ordenao o campo do n que serve de base para as comparaes. Se houver permutao, todos os campos do n devem ser permutados.

Resultados da Ordenao

Por Contigidade fsica, que envolve a movimentao dos prprios dados contidos nos ns. Considere o vetor:
0 1 2 3 4

20

15

05

10

18

Teremos, por contigidade fsica, o mesmo vetor, como segue:


0 1 2 3 4

05

10

15

18

20

Resultados da Ordenao

Usando o vetor indireto de ordenao (VIO): as chaves no se movimentam, pois o resultado est no VIO. Assim, para o exemplo anterior, o vetor ficaria inalterado e o resultado em outro vetor:
0 1 2 3 4

V
VIO

20
0

15
1

05
2

10
3

18
4

Resoluo do VIO

O contedo do novo vetor o endereo do vetor a ser ordenado.


Quiz Implemente esse mtodo de ordenao por indexao

V[vio[i]]

Principais Mtodos de Ordenao

Mtodo da Insero Direta Inicialmente, considera-se o primeiro elemento ordenado. O segundo elemento , ento, inserido na sua posio correta em relao ao primeiro, resultando as duas primeiras posies ordenadas. A seguir, o terceiro elemento inserido na sua posio correta em relao aos dois primeiros, resultando nas trs primeiras posies ordenadas. E assim sucessivamente. Ao inserir cada novo elemento,deslocamentos so feitos, se necessrios.

Exemplo:
0 1 2 3 4

20
ORD
0

15
1

05
2

10
3

18
4

NO ORD

15
0

20
1

05
2

10
3

18
4

1 passada 2 passada

05
0

15
1

20
2

10
3

18
4

05
0

10
1

15
2

20
3

18
4

3 passada

05

10

15

18

20

4 passada

Cdigo
void ins_direta(int *v, int tam) { int aux; for (i=1; i<tam; i++) { aux=v[i]; j=i-1; while ((j>=0) && (aux<v[j])) { v[j+1] = v[j]; // deslocando j--; } v[j+1]=aux; // inserindo } }

void main() { int *v, n, i; printf (Digite o tamanho do vetor:); scanf(%d,&n); v=(int *)malloc(n*sizeof(int)); // gerando o vetor for (i=0; i<n; i++) v[i]=random(1000); // sorteando ins_direta(v,n); printf (Vetor ordenado\n); for (i=0; i<n; i++) printf (%d \t, v[i]); getch(); }

Complexidade do Algoritmo

Analise e ache a funo de complexidade do algoritmo de Ordenao por insero.

Mtodo da Bolha Bubble Sort


Um dos mais conhecidos, simples, mas um dos piores. Pertence classe de mtodos baseados em permutao. Consiste em comparar cada elemento com o prximo (v[i] com v[i+1]) e permut-los sempre que estiverem fora de ordem. Quando se der uma passada sem que haja qualquer troca, o vetor estar ordenado

Exemplo: Considere o vetor


0 1 2 3 4

20
0

15
1

05
2

10
3

18
4

1 passada 2 passada 3 passada

15
0

05
1

10
2

18
3

20
4

05
0

10
1

15
2

18
3

20
4

05

10

15

18

20

VETOR ORDENADO!

Cdigo
void bolha(int *v, int tam) { int aux, troca; j=tam-1; do { troca=0; for (i=0; i<j; i++) if (v[i]>v[i+1]) { aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; troca=1; } j--; }while (troca); }

Complexidade do Algoritmo

Analise e ache a funo de complexidade do algoritmo da Bolha.

Complexidade do Algoritmo

Quais dos dois algoritmos tem a melhor funo de complexidade??


Por que??

Anda mungkin juga menyukai