我试图找到递归函数下降到最远的递归水平,在下面的快速排序代码中,我被告知编辑qsort函数并希望得到任何帮助
def partition(lst, lo, hi):
part = lo
while lo < hi:
while lst[lo] <= lst[part] and lo < hi:
lo += 1
while lst[hi] > lst[part]: # Don't have to check for hi >= 0 cos part is there as a sentinel.
hi -= 1
if lo < hi:
# Swap the two entries
lst[hi], lst[lo] = lst[lo], lst[hi]
# Swap part into position
if lst[part] > lst[hi]: # (this may happen of the array is small (size 2))
lst[part], lst[hi] = lst[hi], lst[part]
print(part)
return hi
def rec_qsort(lst, lo, hi):
if lo < hi:
pivot = partition(lst, lo, hi)
rec_qsort(lst, lo, pivot - 1)
rec_qsort(lst, pivot + 1, hi)
def qsort(lst):
rec_qsort(lst, 0, len(lst) - 1)
return lst
答案 0 :(得分:1)
将深度作为可选参数(默认为0)传递给您的实现函数rec_qsort。当你进行更深入的练习时加一个。
def function(data, depth=0):
if len(data) > 1:
mid = len(data)/2
function(data[:mid], depth+1)
function(data[mid:], depth+1)
print "depth", depth, "length", len(data), data
data = range(10)
function(data)
如果你想查看通话顺序,显然会在开头打印,如果你想要按顺序返回时打印到最后。如果您只是想在调试时查看深度,请添加手表而不是打印。
来自用户pjs的:直接测量的快速排序的最大深度可以是log(n)和n之间的任何值。随机数据或随机选择的枢轴的预期深度与log(n)
成比例