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