Проблема с вашим кодом в том, что в python оператор нарезки возвращает новую копию среза, а не ссылку.То есть, если мы выполним следующие операции
lst = [1, 2, 3, 4]
slice = lst[2:]
slice[0] = -5
print(lst)
, вы получите [1, 2, 3, 4]
.Первоначальный список не изменится.Это проблема в вашем коде;когда вы передаете часть списка в функцию рекурсии, вы не сортируете исходный список.Способ преодолеть эту проблему - передать индекс вместо слайсов.Возможное решение может быть следующим:
from random import shuffle
def bubble_sort(lst, n):
if n == 1:
return
for i in range(n - 1):
if lst[i] > lst[i+1]:
lst[i], lst[i+1] = lst[i+1], lst[i]
bubble_sort(lst, n - 1)
n = 50
x = [i for i in range(50)]
shuffle(x)
bubble_sort(x, n)
print(x)
Мы передаем индекс подсписка для сортировки нашей рекурсивной функции и всегда выполняем операции с исходным списком без срезов.Приведенный выше код должен вывести отсортированный список, как и ожидалось.