import time import datetime # 測試函數運行時間 def cal_time(fn): """計算性能的修飾器""" def wrapper(*args,**kwargs): starTime = time.time() f = fn(*args,**kwargs) endTime = time.time() print('%s() runtime:%s ms' % (fn.__name__, 1000*(endTime - starTime))) return f return wrapper @cal_time def test(): print("開始計算程序運行時間-----------") for i in range(1000000): i = i +1 if __name__ == "__main__": test()
調用此方法
from cal_time import cal_time ''' 查找:在一些數據元素中,通過一定的方法找出與關鍵字相同元素的過程, 列表查找:從列表中查找指定元素 輸入:列表、待查找元素 輸出:元素下標(未找到元素時一般返回None或-1) 內置列表查找函數:index() ''' # 順序查找: 線性查找,從列表的第一個元素開始,順序進行搜索,直到找到元素或搜索到列表的最后一個元素 # 時間復雜度 O(n) n---列表的長度 循環過程中無減半 @cal_time def linear_search(li,val): # li 列表 val 待查找元素 for ind,v in enumerate(li): if v == val: return ind else: return None # 二分查找 : 折半查找,從有序列表中的初始候選區li[O:n]開始,通過對待查找的值與候選區中間的值的比較, # 可以使候選區少一半 # li[1,2,3,4,5,6,7,8,9] @cal_time def binary_search(li,val): left = 0 right = len(li) - 1 while left <= right:# 篩選候選區值 mid = (left + right) // 2 if li[mid] == val: return mid elif li[mid] > val:#待查找值在mid的左側 right = mid - 1 else:# li[mid] 值小於val 意味着帶查找的值在mid右側 left = mid + 1 else: return None #li = [1,2,3,4,5,6,7,8,9] li = list(range(100000000)) linear_search(li,3888) binary_search(li,3888)