QUESTÃO 5
A ordenação Insertionsort também é conhecida como ordenação por inserção. É de implementação simples e traz bons resultados. A técnica consiste em remover o primeiro elemento da lista, e procurar sua posição ideal no vetor e reinseri-lo na tabela. O processo é repetido para todos os elementos.
OLIVEIRA, Pietro Martins de; LEON, Rogério de. Estrutura de Dados II. Maringá-PR, Unicesumar, 2019.
Observe o código-fonte a seguir:
//Aplicando o Insertionsort
int Insertionsort (int vec[], int tam)
{
int i, j;
for(i = 1; i < tam; i++){
j = i;
while((vec[j] < vec[j - 1]) && (j!=0)){
troca(&vec[j], &vec[j-1]);
j--;
}
}
}
//Considere que a função troca() inverte as posições dos parâmetros vec[i] e vec[j] dentro do vetor
Com base no código-fonte apresentado acima, avalie as afirmações a seguir:
I. A passagem de parâmetros do vetor vec[] é feita por referência.
II. Dentro do laço while, o correto seria incrementar o valor de j (j++).
III. O algoritmo acima realiza a ordenação não-decrescente.
É correto o que se afirma em:
Alternativas
Alternativa 1:
I, apenas.
Alternativa 2:
I e II, apenas.
Alternativa 3:
I e III, apenas.
Alternativa 4:
II e III, apenas.
Alternativa 5:
I, II e III.
Soluções para a tarefa
Resposta:
Alternativa 3:
I e III, apenas.
Explicação:
I. A passagem de parâmetros do vetor vec[] é feita por referência.
Correta: Por definição da linguagem C, um vetor é sempre passado por referência, logo, qualquer alteração em seus elementos, altera a variável usada como parâmetro na chamada da rotina.
II. Dentro do laço while, o correto seria incrementar o valor de j (j++).
Incorreta: A variável j recebe o valor de i na declaração do for (i = 1 ... j = i;).
O que o while faz é verificar se o valor de vetor na posição j é MENOR que o valor de vetor na posição anterior j-1 (( vec[j] < vec[j-1)), se for ele troca os dois de lugar para fazer a ordenação crescente. Se não for, ele reduz o J mais uma vez (j--) até J ser igual a 0, para ver se na chave anterior do vetor o valor é menor do que o atual em vec[j]. Por isso j não deve ser incrementado no laço while. // o objetivo de j-- é voltar ao inicio do vetor para garantir que o valor em vec[j] esteja na menor posição possível.
III. O algoritmo acima realiza a ordenação não-decrescente.
Correto: O algoritmo faz a ordenação Crescente dos elementos do vetor passado como argumento.
Pag. 79 e 80.
Pag 80 contém o mesmo algorítimo do exercício.