2017-03-09 78 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