Сортировка питона пузырь - PullRequest
0 голосов
/ 16 мая 2018

Я пишу двустороннюю функцию пузырьковой сортировки под названием bubble_both.При каждом прохождении списка направление меняется.Таким образом, после первого прохода максимальное значение находится на своем правильном месте, а после второго прохода минимальное значение находится на своем правильном месте и т. Д.

Сортировка заканчивается, как только в проходе нет перестановок.

Функция должна печатать список каждый раз через проход и количество выполненных сравнений и количество обменов, выполненных на этом проходе, как в следующем примере: Пример

Ниже я попробовал, но, похоже, есть некоторые ошибки:

def bubble_both(a_list):
   exchanges = True
   pass_num = len(a_list) - 1
   while pass_num > 0 and exchanges:
       exchanges = False
       for i in range(pass_num):
           if a_list[i] > a_list[i + 1]:
               exchanges = True
               a_list[i], a_list[i + 1] = a_list[i + 1], a_list[i]
       pass_num = pass_num - 1

1 Ответ

0 голосов
/ 16 мая 2018

Мне кажется, что ваш код работает хорошо, в том смысле, что он правильно сортирует данные. Но это выглядит как прямой однонаправленный вид для меня. В заявлении о проблеме требуется функция bubble_both() для распечатки отчетов о проделанной работе. В коде нет вызова print(), поэтому вы не видите отчетов о проделанной работе. Но после вызова функции переменная a_list фактически сортируется. Я добавил print() вызов в качестве первой строки функции, и вот что я получил:

>>> a_list
[54, 26, 93, 17, 77, 31, 44, 55, 20]
>>> bubble_both(a_list)
[54, 26, 93, 17, 77, 31, 44, 55, 20]
[26, 54, 93, 17, 77, 31, 44, 55, 20]
[26, 54, 17, 93, 77, 31, 44, 55, 20]
[26, 54, 17, 77, 93, 31, 44, 55, 20]
[26, 54, 17, 77, 31, 93, 44, 55, 20]
[26, 54, 17, 77, 31, 44, 93, 55, 20]
[26, 54, 17, 77, 31, 44, 55, 93, 20]
[26, 54, 17, 77, 31, 44, 55, 20, 93]
[26, 17, 54, 77, 31, 44, 55, 20, 93]
[26, 17, 54, 31, 77, 44, 55, 20, 93]
[26, 17, 54, 31, 44, 77, 55, 20, 93]
[26, 17, 54, 31, 44, 55, 77, 20, 93]
[26, 17, 54, 31, 44, 55, 20, 77, 93]
[17, 26, 54, 31, 44, 55, 20, 77, 93]
[17, 26, 31, 54, 44, 55, 20, 77, 93]
[17, 26, 31, 44, 54, 55, 20, 77, 93]
[17, 26, 31, 44, 54, 20, 55, 77, 93]
[17, 26, 31, 44, 20, 54, 55, 77, 93]
[17, 26, 31, 20, 44, 54, 55, 77, 93]
[17, 26, 20, 31, 44, 54, 55, 77, 93]
[17, 20, 26, 31, 44, 54, 55, 77, 93]

Код не считает обмены как постановку задачи. Он просто использует флаг true / false. Поэтому я не пытался распечатать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...