У меня 2 часа на чтение diveintopython , и я реализовал наивную версию быстрой сортировки.
import operator
def even(num):
return operator.mod(num,2) == 0
def last(list):
return len(list)-1
def median(list):
if even(len(list)):
return len(list)/2 - 1
else:
return len(list)/2
def sort(list, pivot_selector):
if len(list) <= 1:
return list
else:
i = pivot_selector(list)
pivot = list[i]
less, greater, equal = [], [], []
for x in list:
if x < pivot:
less.append( x )
elif x == pivot:
equal.append( x )
else:
greater.append( x )
return sort(less, pivot_selector) + equal + sort(greater, pivot_selector)
if __name__ == "__main__":
print sort([5,4,3,2],median)
print sort([],median)
print sort([2],median)
print sort([3,2],median)
print sort([3,2,3],median)
print sort([1,3,2],median)
print sort([1,'a',0],median)
print sort([None,1,0],median)
5 вопросов:
- Этот код находится в файле с именем quicksort.py. Как скрыть метод даже от экспорта в открытый доступ.
- Является ли pythonic указывать * pivot_selector * в качестве параметра?
- Что-то не так или неоптимально с моей реализацией быстрой сортировки?
- Как бы вы позволили пользователю указать компаратор, который будет принудительно настраивать порядок элементов списка?
- Есть ли питонный способ применить ограничение, согласно которому параметр списка должен содержать однородные типы?