Уведомления

Группа в Telegram: @pythonsu

#1 Март 24, 2019 20:30:35

ilfun
Зарегистрирован: 2019-03-24
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Пузырьковая сортировка в обе стороны

Задание: Напишите функцию 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)

Офлайн

#2 Март 24, 2019 22:52:42

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Пузырьковая сортировка в обе стороны

Привет! У тебя в строчке elif not a: отступ неправильный
Поровняй строку по строке if a:

А так всё правильно
Но я бы вместо elif написал бы просто else:

Отредактировано panama555 (Март 24, 2019 22:54:30)

Офлайн

#3 Март 25, 2019 10:25:44

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Пузырьковая сортировка в обе стороны

У тебя в обеих условиях код дублируется, по этому лучше так:

 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)

Офлайн

#4 Март 25, 2019 10:42:10

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Пузырьковая сортировка в обе стороны

чтоб два раза не вставать

 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

Офлайн

#5 Март 25, 2019 12:18:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Пузырьковая сортировка в обе стороны

  
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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version