有如下代码比较冒泡排序和快速排序的时间:
def makeArray(groesseArray, stellenZahlen):
array = groesseArray * [None]
for i in range(0,groesseArray):
array[i] = randint(0,10**stellenZahlen)
return array
制作数组
def bubble(arr):
n = len(arr)
for i in range(n - 1):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
#print(arr)
冒泡排序算法
def quick(arr):
n = len(arr)
high = []
low = []
if n <= 1:
return arr
else:
pivot = arr.pop()
for i in arr:
if i > pivot:
high.append(i)
else:
low.append(i)
return quick(low) + [pivot] + quick(high)
快速排序算法
def timer(func(arr)):
start = time.time()
func(arr)
end = time.time()
print(end - start)
定时器函数来测量算法的时间
testArray = makeArray(500, 5)
timer(quicksort.quick(testArray))
timer(bubblesort.bubble(testArray))
这是扔
Traceback (most recent call last):
File "C:\Users\user\PycharmProjects\Algo\compare.py", line 30, in <module>
timer(quicksort.quick(testArray))
File "C:\Users\user\PycharmProjects\Algo\compare.py", line 14, in timer
func(arr)
TypeError: 'list' object is not callable
如何将带有列表的函数传递给计时器函数?我试过 *args,**kwargs 希望它是解决方案,但被抛出同样的错误
提前致谢
答案 0 :(得分:2)
将您的计时器功能更改为
def timer(func, arr):
start = time.time()
func(arr)
end = time.time()
print(end - start)
并按如下方式调用它:
timer(quicksort.quick, testArray)
timer(bubblesort.bubble, testArray)
在您的代码中,您在调用 timer
时评估排序函数。结果是一个列表(从排序函数返回),然后传递给 timer
。因此出现错误:您试图将该列表用作 timer
中的函数。
在上面的代码中,函数和数据作为两个单独的参数传递。函数是 Python 中的一等对象,可以像任何变量一样传递给其他函数。