MergeSort - это алгоритм разделения и владения, который разделяет входные данные на несколько частей и рекурсивно решает части.
... Есть несколько подходов для функции разделения. Один из способов - разделить пополам. У этого подхода есть несколько хороших свойств, однако мы сосредоточимся на более быстром методе: четно-нечетное разделение. Идея состоит в том, чтобы поместить каждый элемент с четной позицией в один список и каждую нечетную позицию в другой.
Это прямо из моих конспектов лекции. Почему именно разделение на четное и нечетное происходит быстрее, чем в середине массива?
Я предполагаю, что это как-то связано с тем, что список передается в 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 делит на center)
И результат был:
0,771506746608
0,843161219237