Gabarito disponível
public static int[ ] sort(int [ ] arr){
for(int j=1;j<arr.length;j++){
int val=arr[j];int i=j-1;
while (i≥0 && arr[i]>val){arr[i+1]=arr[i];i-=1;}
arr[i+1]=val;
}
return arr;
}
Resolução comentada
O código é insertion sort e, na 3ª iteração, o array fica {4,6,9,20,18,0}.
O algoritmo pega cada elemento (val) e o insere na posição correta da parte já ordenada, característica do insertion sort. Iteração 1 (j=1): {4,6,20,9,18,0}. Iteração 2 (j=2): 20 já está na posição correta, array inalterado. Iteração 3 (j=3): o 9 é inserido antes do 20, resultando em {4,6,9,20,18,0}.
Análise das alternativas
A e D) Erradas: não é bubble sort, que troca pares adjacentes repetidamente. B) Errada: não há divisão e intercalação de subvetores, logo não é merge sort. E) Errada: o array {4,6,9,18,20,0} corresponde a uma iteração a mais (a 4ª).
Referência: Algoritmos de ordenação: insertion sort.
Resolução comentada do VaiConcursos.