猿问

Python关于分治排序!

分治排序在随机取值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深度??

asdhjhg
浏览 1197回答 0
0回答
随时随地看视频慕课网APP

相关分类

Python
我要回答