分治排序在随机取值L[a]之后(直接取首/尾应该是最省的吧),左边都是小于L[a]的值,右边是大于L[a]的值,然后持续递归至最后一个,那么打个比方,如果右边的值正好按照顺序排好了,运气比较好!那么右边的递归还是会持续进行,哪这样一来复杂度一定程度上是增加的!这是做了重复劳动了!怎么避免或者说如何放一个记号,一旦察觉到右边或者左边正好排好了就停止,只递归另一部分就好??
以下是代码!
def quicksort(L): assert type(L)==list,'An Error about the type of Arguments!Check!Check!Check!' if len(L)<=1: return L return quicksort([x for x in L[1:] if x<=L[0]])\ +[L[0]]\ +quicksort([x for x in L[1:] if x>L[0]])
还有一个小问题,关于Python递归深度,Python默认好像递归深度是1000,应该不到1000就警报了,为什么默认1000?
我手动import sys调整好像也没啥问题啊?有什么潜在问题导致Python默认给你1000深度??
相关分类