Зависает программа о сортировке массива методом "Пузырька"

Osaji

Новичок
Пользователь
Дек 29, 2020
7
0
1
Предупреждение! Все что есть в коде должно остаться и не должно быть ничего нового (по возможности :3)
Вот есть код:
Python:
nums = [2, 51, 6, 1242421254, 5, 0]
Flag = True
while Flag:
     Flag = False
     for i in range(len(nums)-1):
          if nums [i] > nums[i + 1]:
               a1 = nums [i]
               a2 = nums [i + 1]
               b = a1
               a1 = a2
               a2 = b
               Flag = True
print(nums)
Через переменную b я сделал специально, чтоб не делать вот такого: nums [i], nums [i + 1] = nums[i + 1], nums [i]. Возможно эти строки нужно куда-то переставить, но куда я не догадываюсь :(
В чем суть проблемы: программа намертво зависает и ничего не хочет делать :(
Помогите с решением проблемы, плиз :(
Сама программа о сортировке массива методом "Пузырька" и должна при запуске выводить числа в правильно порядке
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
Ну вот мне не нужно это делать через nums[i+1], nums[i] = nums[i], nums[i+1]
а с чем это связано если не секрет?
можно так
Python:
nums = [2, 51, 6, 6, 1242421254, 5, 0]
Flag = True
while Flag:
    Flag = False
    for i in range(len(nums) - 1):
        if nums[i] > nums[i + 1]:
            a = nums[i]
            b = nums[i + 1]
            nums[i + 1] = a
            nums[i] = b
            Flag = True
print(nums)
 

Wolkan

Пользователь
Пользователь
Дек 4, 2020
26
5
3
Код:
nums = [2, 51, 6, 6, 1242421254, 5, 0]
Flag = True
while Flag:
     Flag = False
     for i in range(len(nums)-1):
          if nums [i] > nums[i + 1]:
               nums[i+1], nums[i] = nums[i], nums[i+1]
               Flag = True
print(nums)

Вот так работает.
То что ты написал:
a1 = nums[i ]
a2 = nums [i + 1]
b = a1
a1 = a2
a2 = b
Flag = True
не меняет значения в массиве nums, а просто присваивает значения из массива новым переменным а, b, a1, a2, соответственно твой цикл не идет дальше первого меньшего элемента.
 

Osaji

Новичок
Пользователь
Дек 29, 2020
7
0
1
Код:
nums = [2, 51, 6, 6, 1242421254, 5, 0]
Flag = True
while Flag:
     Flag = False
     for i in range(len(nums)-1):
          if nums [i] > nums[i + 1]:
               nums[i+1], nums[i] = nums[i], nums[i+1]
               Flag = True
print(nums)

Вот так работает.
То что ты написал:
a1 = nums[i ]
a2 = nums [i + 1]
b = a1
a1 = a2
a2 = b
Flag = True
не меняет значения в массиве nums, а просто присваивает значения из массива новым переменным а, b, a1, a2, соответственно твой цикл не идет дальше первого меньшего элемента.
Ну вот мне не нужно это делать через nums[i+1], nums[i] = nums[i], nums[i+1]. Я же написал в задании :(
Может это нужно как-то переставить?
 

Форум IT Специалистов