Задача «Быстрая сортировка»

Реализовать алгоритм быстрой сортировки.

def quick_sort(arr):
    ...

Работу алгоритма протестировать с помощью assert. Особое внимание уделить краевым случаям: len=0, len=1, len четное, len нечетное, уже сортированный массив, массив из одинаковых чисел. Дополнительно реализовать тест генерации случайных массивов случайного размера, сортировкой и последующей проверкой.

Можно исследовать разные способы выбора опорного элемента. Для реализации рандомизированной быстрой сортировки можно обратиться к задаче «Перетасовка».