Проверьте еще раз условия циклов:
1.
while arr[left] <= pivot:
left = left + 1
Что будет с переменной left, если массив состоит из одних и тех же чисел? Например, попробуйте вызвать
print(quickSort([1, 1, 1, 1], 0, 3))
2. Функция swap работает не совсем так, как вы ожидаете: в неё передаются числа, которые внутри функции становятся локальными переменными, соответственно, присваивания, которые в ней происходят, отражаются только на этих локальных перменных, но не исходном массиве. Попробуйте 1) "заинлайнить" функцию в место вызова (заменить место вызова на тело функции), или 2) перепишите функцию так, чтобы она принимала на вход массив
arr, и два индекса, и производила обмен над массивом (подробнее про это можно почитать
https://docs.python.org/3/faq/programming.html#how... ,
https://stackoverflow.com/questions/986006/how-do-... )