满足递归深度限制后切换到heapsort的python3median-of-3快速排序实现

满足递归深度限制后切换到heapsort的python3median-of-3快速排序实现,python,recursion,quicksort,heapsort,Python,Recursion,Quicksort,Heapsort,调用的函数:(不考虑类) 因此,这段代码应该获取一个列表,并使用quicksort实现的中位数3对其进行排序,直到达到深度递归限制,此时函数将使用heapsort。然后将这段代码的结果输入另一个程序,该程序设计用于测试长度为1,1010010001000000的列表的算法 然而,当我运行代码时,它告诉我长度1和10可以正常工作,但在这之后,它给出了一个列表索引越界错误 开始=中间值为3的函数中的lst[0] 我不明白为什么。没有看到你的测试数据,我们在这里盲目飞行。总的来说 它本身很好,但您从不

调用的函数:(不考虑类)

因此,这段代码应该获取一个列表,并使用quicksort实现的中位数3对其进行排序,直到达到深度递归限制,此时函数将使用heapsort。然后将这段代码的结果输入另一个程序,该程序设计用于测试长度为1,1010010001000000的列表的算法

然而,当我运行代码时,它告诉我长度1和10可以正常工作,但在这之后,它给出了一个列表索引越界错误

开始=中间值为3的函数中的lst[0]


我不明白为什么。

没有看到你的测试数据,我们在这里盲目飞行。总的来说

它本身很好,但您从不检查
less
more
以查看它们是否为空。即使它们是空的,也会通过以下方式传递:

    return quicheSortRec(less,limit-1) + same + quicheSortRec(more,limit-1)
而且
quicheSortRec()
也不会检查它们是否为空:它无条件地调用:

pivot=qsPivotMedian3.medianOf3(lst)  
如果传递的是空列表,该函数将引发您看到的错误。请注意,
quicheSort()
会检查是否有空输入。递归辅助函数也应该是

BTW,考虑重写<代码> MITEANOF3()<代码>:< /P>


这是一种简洁更清晰的情况;-)

请给出一个发生错误的列表的具体示例,其他人可以运行该示例。如果你这样做了,我打赌你自己会发现问题的;-)
less, same, more = qsPivotMedian3.partition(pivot, lst)
    return quicheSortRec(less,limit-1) + same + quicheSortRec(more,limit-1)
pivot=qsPivotMedian3.medianOf3(lst)  
def medianOf3(lst):
    return sorted([lst[0], lst[len(lst)//2], lst[-1]])[1]