как продолжить сортировку пузырьков

#python #sorting

Вопрос:

 def bubble(v):
l = len(v)
for i in range(l-1):
    for j in range(l-i-1):
        if v[j]>v[j 1]:
            v[j 1],v[j] = v[j],v[j 1]
    return v
 

Если я попробую bubble([5,4,3,2,1]), он напечатает 43215, я хочу, чтобы код продолжал сравнивать, где я должен исправить?

Ответ №1:

Я думаю, что вам просто нужно исправить отступ в вашем возвращении. Попробуйте поместить его на тот же уровень первого цикла for; в противном случае вы вернете результат (и, следовательно, выйдете из своей функции) на первой итерации вашего внешнего цикла.

Комментарии:

1. На самом деле все, что находится между тем def и return другим, неправильно — нуждается в большем отступе.

2. Да, я согласен, но я предположил, что это была просто опечатка, потому что в противном случае код не показал бы поведение, описанное Строберри. Но, конечно, вы совершенно правы: все строки рядом с первой и последней должны быть отступами на один уровень больше

Ответ №2:

return должна быть вкладка слева. Если вы поместите его сюда, он остановит выполнение после первой итерации (первого цикла for).

 def bubble(v):
    l = len(v)
    for i in range(l-1):
        for j in range(l-i-1):
            if v[j]>v[j 1]:
                v[j 1],v[j] = v[j],v[j 1]
    return v