Я получаю неожиданные (?) Результаты от этой реализации слияния.Это очень медленно по сравнению с моей трехсторонней быстрой сортировкой (также написанной на python).
Моя быстрая сортировка завершается с 10000 элементами примерно через 0,005 с, тогда как для сортировки слиянием требуется 1,6 с!Включая исходный код для обеих реализаций.
Слияние:
#Merges two sorted lists into one sorted list. recursively
def merge(left, right):
if len(left) == 0 and len(right) == 0:
return []
elif len(left) == 0:
return right
elif len(right) == 0:
return left
else:
if left[0] <= right[0]:
return left[:1] + merge(left[1:],right)
else:
return right[:1] + merge(left,right[1:])
#Splits a list in half and returns the halves
def halve(list):
return list[:len(list)//2],list[len(list)//2:]
#Mergesort
def mergesort(list):
if len(list) <= 1:
return list
left,right = halve(list)
left,right = mergesort(left),mergesort(right)
return merge(left,right)
Быстрая сортировка:
#Three-way QuickSort in Python
def quicksort(a):
if len(a) == 0:
return []
p = a[(len(a)-1)//2]
less = quicksort([x for x in a if x < p])
greater = quicksort([x for x in a if x > p])
equal = [x for x in a if x == p]
return less + equal + greater
Может кто-нибудь придумать объяснение или, возможно, даже исправить?1011 *