MergeSort - это алгоритм разделения и покоя, который делит вход на несколько частей и рекурсивно решает реплики.
... Существует несколько подходов к функции split. Один из способов - разделить середину. Этот подход имеет некоторые приятные свойства, однако мы сосредоточимся на методе, который немного быстрее: четно-нечетное разделение. Идея состоит в том, чтобы поместить каждый элемент четной позиции в один список и каждую нечетную позицию в другую.
Это прямо из моих лекций. Почему именно так, что четное раздвоение происходит быстрее, чем до середины массива?
Я предполагаю, что это связано с тем, что список передается в MergeSort и имеет качество уже уже отсортированного, но я не совсем уверен.
Может ли кто-нибудь пролить свет на это?
Изменить: я попытался выполнить следующее в Python...
global K
K = []
for i in range (1, 100000):
K.append(i)
def testMergeSort():
"""
testMergeSort shows the proper functionality for the
Merge Sort Algorithm implemented above.
"""
t = Timer("mergeSort([K])", "from __main__ import *")
print(t.timeit(1000000))
p = Timer("mergeSort2([K])", "from __main__ import *")
print(p.timeit(1000000))
(MergeSort является четным MergeSort, MergeSort2 делит вниз по центру)
И результат:
+0,771506746608
+0,843161219237