Как проверить сортируемый список с помощью булевой переменной?
for i in range(len(a)-1, 0, -1):
    swapped = False
    for j in range(i):
        if a[j] > a[j + 1]:
            a[j], a[j + 1] = a[j + 1], a[j]
            swapped = True
    if not swapped:
        break
upd: исправил циклы. После первого прохода мы знаем, что последний элемент списка максимальный (наш "пузырек" всплыл), после второго, что предпоследний - максимальный из оставшихся и т.д.
Виталий уже написал правильный ответ, но вот немного теории:
За каждую итерацию мы сортируем один элемент, соответственно если в какой-то момент перестановок в итерации не случается, значит переставлять нечего. Именно для этого и вводиться флаг.