Почему разделение четно-нечетное «быстрее» для MergeSort?

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

11
задан Unsure 25 May 2011 в 13:58
поделиться