Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Uso de for aninhados no "bubble sort"

lista = [7,5,4,1,3]
fim = len(lista)#5
#i 4 3 2 1

for i in range(fim-1,0,-1):
    for j in range(i):
        #print(i, j)
        if lista[j] > lista[j +1]:
           if lista[j] > lista[j+1]:
               lista[j], lista[j+1] = lista[j+1],lista[j]
print(lista)

Estou achando um pouco confuso o uso do for aninhado acima: por que range(fim-1,0,-1)? Alguém poderia me explicar?

3 respostas

Como foi utilizado o range no modo de decremento (no passo de -1), o primeiro valor não pode ser maior que o maior índice da lista [0 1 2 3 4], que neste caso é 4.

Espero ter ajudado. Não esquece de colocar como tópico resolvido se entendeu :)

@Humberto Tiggemann Poderia explicar passo a passo os loops aninhados?

solução!

No primeiro "for" ele vai percorrer do índice 4 até o 0. No segundo "for" ele vai percorrer de 0 até o valor do índice da interação acima, e assim sucessivamente

[ i  j ]     [ valores da lista]
4 0     [5, 7, 4, 1, 3]
4 1     [5, 4, 7, 1, 3]
4 2     [5, 4, 1, 7, 3]
4 3     [5, 4, 1, 3, 7]
3 0     [4, 5, 1, 3, 7]
3 1     [4, 1, 5, 3, 7]
3 2     [4, 1, 3, 5, 7]
2 0     [1, 4, 3, 5, 7]
2 1     [1, 3, 4, 5, 7]
1 0     [1, 3, 4, 5, 7]

Ou seja, ele vai percorrer os índices da direita para a esquerda, colocando o maior valor para a direita (de forma crescente)