Как указал Ники, вы сравниваете очень быструю процедуру C с Python. Использование psyco немного ускоряет его для меня, но вы действительно можете ускорить его, используя модуль битового вектора, написанный на C. Я использовал bitarray , и тогда метод сортировки бит превосходит встроенная сортировка для размера массива около 250 000 с использованием psyco.
Вот функция, которую я использовал:
def vec_sort2(input_li):
bv = bitarray(len(input_li))
bv.setall(0)
for i in input_li:
bv[i] = 1
return [i for i in xrange(len(bv)) if bv[i]]
Обратите внимание, что я использовал понимание списка, чтобы построить отсортированный список, что немного помогает. Используя psyco и вышеуказанную функцию с вашими функциями, я получаю следующие результаты:
test_data size is: 1000000
sort function takes 1.29699993134
vec_sort function takes 3.5150001049
vec_sort2 function takes 0.953999996185
Как примечание, BitVector не особенно оптимизирован даже для Python. Прежде чем я нашел bitarray, я сделал несколько различных настроек модуля и, используя мой модуль, который имеет настройки, время для vec_sort сокращается за секунду для этого размера массива. Я не отправил свои изменения, потому что bitarray намного быстрее.