Найти - Пользователи
Полная версия: Пузырьковая сортировка в обе стороны
Начало » Python для новичков » Пузырьковая сортировка в обе стороны
1
ilfun
Задание: Напишите функцию 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
panama555
Привет! У тебя в строчке elif not a: отступ неправильный
Поровняй строку по строке if a:

А так всё правильно
Но я бы вместо elif написал бы просто else:
Rodegast
У тебя в обеих условиях код дублируется, по этому лучше так:
 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
vic57
чтоб два раза не вставать
 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
FishHook
  
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB