В python, когда вы разрезаете список, создается новый список со значениями.
list1 = [1, 2, 3, 4, 5]
list2 = list1[:3] #[1, 2, 3]
list2[0] = 5 #[5, 2, 3]
print(list1, list2) #[1, 2, 3, 4, 5] [5, 2, 3]
Любые изменения, внесенные в нарезанный список, не отражаются в исходном.
В вашей функции quick_sort вы разрезали список на левые и правые части и вызывали на них quick_sort. Это не влияет на порядок исходного списка.
Чтобы решить эту проблему, измените свою функцию, чтобы вместо этого взять список вместе с начальным и конечным индексом места сортировки.
def quick_sort(array, start, end):
if end - start <= 1:
return
else:
pivot = array[start]
i = start + 1
j = end - 1
while i != j:
while array[j] >= pivot and i < j:
j -= 1
while array[i] <= pivot and i < j:
i += 1
if i < j:
array[i], array[j] = array[j], array[i]
if array[start] > array[i]:
array[start], array[i] = array[i], array[start]
quick_sort(array, start, i)
quick_sort(array, i, end)