Быстрая сортировка с двойным поворотом удаляет числа во время работы. Количество удаленных чисел зависит от выбранных мной точек разворота. Питон

#python #sorting #quicksort #partitioning

#питон #сортировка #быстрая сортировка #разделение

Вопрос:

как указано в названии, я столкнулся с проблемой при создании алгоритма быстрой сортировки. Алгоритм может пройти через некоторые виды, если я сделаю свои точки разворота началом и концом arr, что, как я знаю, не является оптимальным. Но даже с этим «трюком» он все равно не работает со случайно сгенерированными массивами. Лично я подозреваю, что опорные точки-это сбой в моем коде, но я не совсем уверен.

 import random  def quick3(arr):  if(len(arr) lt;=1): return arr   left = arr[0]  right = arr.pop()  if left gt; right: left, right = right, left   l = []  m = []  h = []   for i in range(len(arr)):  if arr[i] lt; left: l.append(arr[i])  if arr[i] gt; right: h.append(arr[i])  if arr[i] gt; left and arr[i] lt; right: m.append(arr[i])  return quick3(l)   [left]   quick3(m)   [right]   quick3(h)  

Комментарии:

1. Я не любитель Питона (пока?) но, похоже, у вас возникнут проблемы, если у вас будут дубликаты ключей. — Кроме того, меня озадачивает асимметрия настройки left vs right — не pop() удаляет элемент? (против arr[0] того, чтобы не делать этого)