Informática, perguntado por adogliari, 3 meses atrás

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

Respondido por btotta
9

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.

Perguntas interessantes