2017-03-09 82 views
0

我目前正在尝试计时合并排序功能。 唯一的问题是合并排序函数是递归的,每次完成时都会返回时间。如何计算递归函数?

我该如何解决这个问题?

def MergeSort(argShuffledList): 
    dblStart = time.clock() 
    if len(argShuffledList)>1: 
     intMidValue = len(argShuffledList)//2 
     listLeftHalf = argShuffledList[:intMidValue] 
     listRightHalf = argShuffledList[intMidValue:] 

     left_part = MergeSort(listLeftHalf) 
     right_part = MergeSort(listRightHalf) 


     i=0 
     j=0 
     k=0 
     while i < len(listLeftHalf) and j < len(listRightHalf): 

      if listLeftHalf[i] < listRightHalf[j]: 
       argShuffledList[k]=listLeftHalf[i] 
       i =i+1 

      else: 
       argShuffledList[k]=listRightHalf[j] 
       j=j+1 

      k=k+1 

     while i < len(listLeftHalf): 
      argShuffledList[k]=listLeftHalf[i] 
      i=i+1 
      k=k+1 


     while j < len(listRightHalf): 
      argShuffledList[k]=listRightHalf[j] 
      j=j+1 
      k=k+1 


    intTime = "%.2f" % ((time.clock() - dblStart) * 1000000) 
    message = "Elasped Time: " + str(intTime) + " microseconds" 
    print("Selection Sort: ", argShuffledList) 
    print(message, "\n") 
+7

为什么在函数内部有计时代码?为什么不在录制前和录制后记录时间? – Carcigenicate

+1

@Carcigenicate是的,确切的。此外,应该使用'timeit'模块。 –

回答

2

您是否尝试过移动的方法之外的时机?换句话说,开始计时,然后调用你的方法,然后停止计时:

# Start timing 
dblStart = time.clock() 
# Call method 
MergeSort(argShuffledList) 
# Stop timing and print results 
intTime = "%.2f" % ((time.clock() - dblStart) * 1000000) 
message = "Elasped Time: " + str(intTime) + " microseconds" 
print(message, "\n") 
+0

天真方法的好例子。使用juanpa建议的时序库将是一件好事,可以提及并显示使用。单一计时testike这是完全无用的任何目的。 – Carcigenicate