2017-03-09 7 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として示唆されたタイミングライブラリを使用することは、言及し、その使用を示すのに良いことです。単一のタイミングのテストは、これを全く目的としていません。 – Carcigenicate

関連する問題