Python quicksort递归深度

时间:2016-11-18 15:10:55

标签: python recursion quicksort

我试图找到递归函数下降到最远的递归水平,在下面的快速排序代码中,我被告知编辑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

1 个答案:

答案 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)

成比例