【发布时间】:2021-03-13 11:05:57
【问题描述】:
我有 2 个单独的函数,用于打印数组排序算法(插入排序和快速排序)的比较计数。在这些函数中,我使用 4 个不同的列表调用排序算法 4 次。
Alg. / Comparison count: l=10 l=100 l=1000 l=10000
Insertion-sort: 18 198 1998 19998
Alg. / Comparison count: l=10 l=100 l=1000 l=10000
Quick-sort: 41 797 13392 214916
问题是我只能调用其中一个函数,如果我同时调用这两个函数,我会在快速排序函数上遇到递归错误
RecursionError: maximum recursion depth exceeded in comparison
所以这个
make_arrays()
print("Alg. / Comparison count:\tl=10\tl=100\tl=1000\tl=10000")
print_comp_insert()
还有这个
make_arrays()
print("Alg. / Comparison count:\tl=10\tl=100\tl=1000\tl=10000")
print_comp_quick()
工作正常,但是这个
make_arrays()
print("Alg. / Comparison count:\tl=10\tl=100\tl=1000\tl=10000")
print_comp_insert()
print_comp_quick()
导致错误。
我真的不明白这里发生了什么。
【问题讨论】:
-
如何初始化数组?快速排序和插入排序是否在洗牌数组的两个不同副本上运行?如果您使用插入排序对数组进行排序,那么它就会被排序。如果您随后在同一个数组上调用快速排序,则您正在尝试对已排序的数组进行排序。这应该可以正常工作,尽管众所周知,快速排序在排序数组上的性能比在无序数组上更差。
标签: python arrays list sorting recursion