2014-09-27 3 views
2

У меня есть рабочий алгоритм быстрой сортировки, который сортирует строки и целые числа в порядке возрастания, однако мне нужно изменить его, чтобы поменять местами по убыванию и обратно. Простое изменение знаков не сработало. Любая помощь/советы будут оценены, я включил соответствующий сегмент:Python reverse quicksort

 while left_pointer <= right_pointer and \ 
      items[left_pointer] <= pivot_pointer: 
      left_pointer += 1 

     while items[right_pointer] >= pivot_pointer and \ 
      right_pointer >= left_pointer: 
      right_pointer -= 1 

ответ

1

Оператор равенства для сравнения значений должны быть обратными; не выключайте знаки. Левые все еще левые, правые все еще правы.

Почему это работает? Ну, рассмотрим функцию сортировки, которая берет предикат, sorted(lst, cmp=f). Когда f is lambda a,b: a >= b сортировать по возрастанию, а когда lambda a,b: a <= b опускается.

Так где же «f» в коде сортировки? Ну, это здесь:

while leftmark <= rightmark and f(items[leftmark], pivotvalue): 
     leftmark += 1 

# note the argument order is reversed so that the same "f"/equality is used 
while f(pivotvalue, items[rightmark]) and rightmark >= leftmark: 
     rightmark -= 1 

Таким образом, те два места (где «е» имеет место), что сравнение должно быть отменено, чтобы изменить порядок сортировки - в качестве альтернативы, оставить в f и поставить соответствующую функцию.