Форум сайта python.su
0
Задание: Напишите функцию bubble(lst, a=False), которая принимает один обязательный аргумент - список из чисел, выполняет сортировку списка методом пузырька и возвращает получившийся список.
Аргумент a задает порядок сортировки. Если он равен True, то функция сортирует по убыванию, если он равен False, то - по возрастанию.
По умолчанию функция сортирует список по возрастанию.
Запрещено использовать встроенные возможности языка для сортировки.
Нужна только функция ввод/вывод реализовывать не нужно
Подскажите, пжл, что не так с моим вариантом?
def bubble(lst, a=False): if a: for i in range(len(lst)-1): for j in range(len(lst)-i-1): if lst[j] > lst[j+1]: lst[j], lst[j+1] = lst[j+1], lst[j] elif not a: for i in range(len(lst)-1): for j in range(len(lst)-i-1): if lst[j] < lst[j+1]: lst[j], lst[j+1] = lst[j+1], lst[j] return lst
Отредактировано ilfun (Март 25, 2019 07:00:23)
Офлайн
4
Привет! У тебя в строчке elif not a: отступ неправильный
Поровняй строку по строке if a:
А так всё правильно
Но я бы вместо elif написал бы просто else:
Отредактировано panama555 (Март 24, 2019 22:54:30)
Офлайн
186
У тебя в обеих условиях код дублируется, по этому лучше так:
def bubble(lst, a=False): for i in range(len(lst)-1): for j in range(len(lst)-i-1): if (lst[j] > lst[j+1]) if a else (lst[j] < lst[j+1]): lst[j], lst[j+1] = lst[j+1], lst[j] return lst
Отредактировано Rodegast (Март 25, 2019 10:26:46)
Офлайн
чтоб два раза не вставать
def bubble(lst, a=False): l = len(lst) -1 for i in range(l): for j in range(l-i): if (lst[j] > lst[j+1]) if a else (lst[j] < lst[j+1]): lst[j], lst[j+1] = lst[j+1], lst[j] return lst
Офлайн
568
from collections import deque def bubble_sort(lst, desc=False): _ = lambda i: deque([i]) def swipe(l): if not l: return l head, tail = l.popleft(), l if tail: n = tail[0] if head > n: return _(tail.popleft()) + swipe(_(head) + tail) return _(head) + swipe(tail) return _(head) def cycle(l): if l: l = swipe(l) l.reverse() head, tail = l.popleft(), l return _(head) + cycle(swipe(tail)) return deque() res = cycle(deque(lst)) if desc: res.reverse() return res
Офлайн