设计思路如下:
def buildData(n):
"""构造测试规模为n的输入数据,对于排序,随机n个数的列表"""
data = [random.randrange(n) for i in range(n)]
return data
def timing(f, data):
"""测量函数调用f(data)的运行时间分析"""
start = time.time() #记录开始时间
f(data) #运行f(data)
end = time.time() #记录结束时间
return end - start #返回执行时间
def timingAnalysis(f,m1, m2, runs, buildData) :
"""输出函数f在不同输入规模: 10**m1,.... ,10**m2运行runs次的时间"""
for n in [10**i for i in range(m1, m2+1)]: #10**m1,...,10**m2
data = buildData (n)
total = 0.0 #初始化总时间
for i in range(runs) : #重复运行runs次
total += timing(f, data) #运行f并累计运行时间
strResult = '输入规模{:10}时函数{:15}运行{}次的平均时间为: {} 秒'
print (strResult.format(n, f.__name__, runs, total/runs))
time_analysis.py
import time
import random
def timing(f, data):
"""测量函数调用f(data)的运行时间分析"""
start = time.time() #记录开始时间
f(data) #运行f(data)
end = time.time() #记录结束时间
return end - start #返回执行时间
def timingAnalysis(f,m1, m2, runs, buildData) :
"""输出函数f在不同输入规模: 10**m1,.... ,10**m2运行runs次的时间"""
for n in [10**i for i in range(m1, m2+1)]: #10**m1,...,10**m2
data = buildData (n)
total = 0.0 #初始化总时间
for i in range(runs) : #重复运行runs次
total += timing(f, data) #运行f并累计运行时间
strResult = '输入规模{:10}时函数{:15}运行{}次的平均时间为: {} 秒'
print (strResult.format(n, f.__name__, runs, total/runs))
def buildData(n):
"""构造测试规模为n的输入数据,对于排序,随机n个数的列表"""
data = [random.randrange(n) for i in range(n)]
return data
#测试代码
if __name__ == "__main__" :
from bubbleSort import bubbleSort
from selectionSort import selectionSort
from insertSort import insertSort
from mergeSort import mergeSort
from quickSort import quickSort
def quickSort1 (a) :
quickSort(a, 0, len(a) - 1)
#冒泡排序算法,时间复杂度分析
timingAnalysis (bubbleSort, 2, 4, 1, buildData)
print()
#选择排序算法,时间复杂度分析
timingAnalysis (selectionSort, 2, 4, 1, buildData)
print()
#插入排序算法,时间复杂度分析
timingAnalysis (insertSort, 2, 4, 1, buildData)
print()
#归并排序算法,时间复杂度分析
timingAnalysis (mergeSort, 1, 4, 1, buildData)
print()
#快速排序算法,时间复杂度分析
timingAnalysis (quickSort1, 1, 4, 1, buildData)
print()
#内置排序算法sort,时间复杂度分析
timingAnalysis(sorted, 1, 4, 1, buildData)
运行:
输入规模 100时函数bubbleSort 运行1次的平均时间为: 0.000997781753540039 秒
输入规模 1000时函数bubbleSort 运行1次的平均时间为: 0.10474658012390137 秒
输入规模 10000时函数bubbleSort 运行1次的平均时间为: 8.514265298843384 秒
输入规模 100时函数selectionSort 运行1次的平均时间为: 0.0 秒
输入规模 1000时函数selectionSort 运行1次的平均时间为: 0.044878244400024414 秒
输入规模 10000时函数selectionSort 运行1次的平均时间为: 4.592764377593994 秒
输入规模 100时函数insertSort 运行1次的平均时间为: 0.0009894371032714844 秒
输入规模 1000时函数insertSort 运行1次的平均时间为: 0.0917809009552002 秒
输入规模 10000时函数insertSort 运行1次的平均时间为: 7.810081720352173 秒
输入规模 10时函数mergeSort 运行1次的平均时间为: 0.0 秒
输入规模 100时函数mergeSort 运行1次的平均时间为: 0.000997304916381836 秒
输入规模 1000时函数mergeSort 运行1次的平均时间为: 0.0029914379119873047 秒
输入规模 10000时函数mergeSort 运行1次的平均时间为: 0.03091740608215332 秒
输入规模 10时函数quickSort1 运行1次的平均时间为: 0.0 秒
输入规模 100时函数quickSort1 运行1次的平均时间为: 0.0009975433349609375 秒
输入规模 1000时函数quickSort1 运行1次的平均时间为: 0.001994609832763672 秒
输入规模 10000时函数quickSort1 运行1次的平均时间为: 0.02396249771118164 秒
输入规模 10时函数sorted 运行1次的平均时间为: 0.0 秒
输入规模 100时函数sorted 运行1次的平均时间为: 0.0 秒
输入规模 1000时函数sorted 运行1次的平均时间为: 0.0 秒
输入规模 10000时函数sorted 运行1次的平均时间为: 0.0019676685333251953 秒