为什么这个合并排序代码比python的默认排序()慢很多?

时间:2018-03-25 21:41:36

标签: python python-2.7 mergesort

我从博客中获取了这个合并排序示例。我刚刚开始学习合并排序,我想检查它的速度与python的默认排序算法相比。使用短随机生成列表并不是很明显,但是有一个大的列表,比如一个拥有1,000,000个整数的列表,大约需要10秒,而python的默认排序算法甚至不会接近1秒。

import random
import time


def mergeSort(alist):

 if len(alist)>1:
   mid = len(alist)//2
   lefthalf = alist[:mid]
   righthalf = alist[mid:]

   mergeSort(lefthalf)
   mergeSort(righthalf)

   i=0
   j=0
   k=0

   while i < len(lefthalf) and j < len(righthalf):
       if lefthalf[i] < righthalf[j]:
           alist[k]=lefthalf[i]
           i=i+1
       else:
           alist[k]=righthalf[j]
           j=j+1
       k=k+1

   while i < len(lefthalf):
       alist[k]=lefthalf[i]
       i=i+1
       k=k+1

   while j < len(righthalf):
       alist[k]=righthalf[j]
       j=j+1
       k=k+1


array = [random.randint(0,1000) for a in range(0,10000)]

#print "original random generated array:",array

start = time.clock()

sorted_array = mergeSort(array)

#print "\nSorted array: ", sorted_array

print "Time: ", str(time.clock() - start)

start1 = time.clock()

array = array.sort()

print "Time: ", str(time.clock() - start1)

1 个答案:

答案 0 :(得分:1)

Python很适合很多东西,但与许多其他语言相比,它的运行速度非常慢。典型Python发行版中的内置函数是用C语言编写的,比同等的Python代码快得多。