Um exemplo clássico ao explicar este método é o de ordenar um baralho passando as cartas da mão direita para a mão esquerda passando carta por carta.
#define TAM 10 void insertion_sort(int v[]) { int i, j, aux; for(i = 1; i < TAM; i++) { aux = v[i]; j = i - 1; while((j >= 0) && (aux < v[j])) { v[j+1] = v[j]; j--; } v[j+1] = aux; } } main() { int i, vet[TAM] = {10,9,3,6,7,5,1,8,4,2}; printf("Vetor atual: "); for(i = 0; i < TAM; i++) printf("%d ", vet[i]); printf("\n"); system("pause"); insertion_sort(vet); printf("\n\nVetor ordenado: "); for(i = 0; i < TAM; i++) printf("%d ", vet[i]); printf("\n"); system("pause"); return 0; }
Neste método a quantidade de iterações dependerá de quão desordenado está o vetor.
Para verificar a quantidade de iterações podemos criar uma variável global e mandar incrementa-la a cada vez que entrar no laço for e no laço while e mandar imprimi-la no final para ver o resultado.
Dessa forma:
#define TAM 10 int k = 0; void insertion_sort(int v[]) { int i, j, aux; for(i = 1; i < TAM; i++) { aux = v[i]; j = i - 1; while((j >= 0) && (aux < v[j])) { v[j+1] = v[j]; j--; k++; } v[j+1] = aux; k++; } } main() { int i, vet[TAM] = {10,9,3,6,7,5,1,8,4,2}; printf("Vetor atual: "); for(i = 0; i < TAM; i++) printf("%d ", vet[i]); printf("\n"); system("pause"); insertion_sort(vet); printf("\n\nVetor ordenado: "); for(i = 0; i < TAM; i++) printf("%d ", vet[i]); printf("\nk = %d",k); system("pause"); return 0; }
O resultado neste caso é 42 iterações. Pode parecer pouco, mais quando aumentamos a quantidade de posições do vetor a diferença aumenta.
Nenhum comentário:
Postar um comentário