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
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
V[vio[i]]
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
20
0
15
1
05
2
10
3
18
4
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
Complexidade do Algoritmo