-
Observe o retorno da função bubbleSort, essa função retornará o valor da variável trocas
A linha for i in rang/e(0,len(numeros)-1): é igual ao rang/e(0,8) ou seja, 0,1,2,3,4,5,6,7
Com isso a variável trocas ao final valerá 8
Observe que o if somente será verdadeiro se o 1º valor for maior que o 2º.
Observe agora que QUASE todos os valores irá retornar FALSO para a execução do IF, pois o 1º valor será menor que o 2ª valor, EXCETO!!! pelos dois últimos valores...
94 > 93 ? TRUE
a troca interna dentro do IF será executada, e a variável TROCOU será marcada como TRUE.
O COMANDO WHILE SERÁ EXECUTADO NOVAMENTE e com isso...
A linha do for SERÁ EXECUTAVA NOVAMENTE portanto ran/ge(0,8) ou seja, 0,1,2,3,4,5,6,7
Como variável trocas já possui o valor 8, no final ela valerá 16 (8+8)
Como não existe mais valores que satisfaçam o IF.
O print bubbleSort(numeros) irá imprimir o valor da variável trocas, ou seja, valor 16.
GABARITO ALTERNATIVA D
-
Galera, já vimos o funcionamento do algoritmo Bubble Sort anteriormente na aula de Lógica de Programação. O objetivo desse algoritmo é ordenar uma sequência de números desordenada. O código do enunciado implementa esse algoritmo corretamente em linguagem Python.
Mas para matar a questão, temos que nos atentar aos detalhes.
A função bubbleSort ordena corretamente a lista numeros recebido como argumento. O problema é a variável trocas. Apesar do nome, ela não reflete o número efetivo de trocas realizado pelo Bubble Sort. Se fosse o número de trocas do Bubble Sort seria 1, somente a troca do 94 pelo 93 para a lista numeros ficar ordenada.
Pelo código que está escrito, a variável trocas ao final da execução armazenará um outro valor. Vamos lá, passo a passo.
No início, trocou = True, então ele entra a 1a vez no while.
O range do for é [0, 1, 2, 3, 4, 5, 6, 7]. Como o incremento do trocas ocorre dentro desse for, trocas será incrementado 8 vezes ficando trocas = 8 após as 8 repetições do 1o for. O if dá verdadeiro 1 vez somente, quando chega no 94 que é menor que o elemento subsequente 93. É realizada a troca de 94 por 93 e a variável trocou é modificada para True.
Como trocou = True, entra a 2a vez no while. Nesta passagem, o range do for é o mesmo que na passagem anterior. Então a variável trocas será incrementada 8 vezes de novo. Como o valor anterior de trocas era 8, após os 8 novos incrementos vai a 16. Após isso, não ocorre mais troca, trocou = False e a função é finalizada.
Portanto, a função bubbleSort retornará o valor final de trocas = 16.
Resposta: D
-
-
tentei rodar esse código adaptando ,mas nenhum jeito retornou 16
-
A linguagem Python não tem vírgulas logo a não indentação/organização do código dificulta ainda mais uma analise. Segue pessoal:
def bubbleSort(numeros):
trocas = 0
trocou = True
while trocou:
trocou = False
for i in range(0,len(numeros)-1):
trocas += 1
if numeros[i] > numeros[i+1]:
numeros[i],numeros[i+1] \
= numeros[i+1],numeros[i]
trocou = True
return trocas
numeros = [17, 20, 26, 31, 44, 55, 77, 94, 93]
print bubbleSort(numeros)
print números