Кто-нибудь знает, почему он не печатает отсортированный массив? - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь закодировать алгоритм пузырьковой сортировки в Python, у которого есть флаг, который останавливает ненужные проходы. Результат, который я получаю:

[5, 9, 4, 15, 3, 8, 11]

[5, 4, 9, 15, 3, 8, 11]

[5, 4, 9, 3, 15, 8, 11]

[5, 4, 9, 3, 8, 15, 11]

[5, 4 , 9, 3, 8, 15, 11]

Правильный результат должен отображать каждый проход сортировки пузырьком, причем последний проход является отсортированным списком, но, как вы можете видеть выше, это не так.

numbers = [9, 5, 4, 15, 3, 8, 11]
numItems = len(numbers)
flag = True
i = 0
j = 0
while i < (numItems - 1) and (flag == True):
    flag = False
    for x in range(j, (numItems - i - 2)): 
        if numbers[j] > numbers[j + 1]:
            temp = numbers[j]
            numbers[j] = numbers[j+1]
            numbers[j+1] = temp
            print(numbers)
            flag = True
        j += 1
    i += 1
print(numbers)

1 Ответ

0 голосов
/ 02 апреля 2020
  1. вы увеличиваете j, и как только вы заканчиваете sh внутреннее l oop, j останется (numItems - i - 2), вы должны сбросить его на 0, где вы увеличиваете i или l oop с j без использования x.

  2. Вы перешли от j к ni-2, вам нужно l oop к ni-1.

  3. вам не нужен флаг

после изменений:

numbers= [9, 5, 4, 15, 3, 8, 11]
numItems = len(numbers)
i = 0
while i < (numItems - 1):
    for j in range(0, numItems - i - 1):
        if numbers[j] > numbers[j + 1]:
            temp = numbers[j]
            numbers[j] = numbers[j+1]
            numbers[j+1] = temp
            print(numbers)
    i += 1
print(numbers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...