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로 제안 된 타이밍 라이브러리를 사용하는 것은 언급하고 사용하는 것이 좋은 것입니다. 단일 타이밍 testike는 어떤 목적으로도 완전히 쓸모가 없습니다. – Carcigenicate