python中关于merge_sort的是不是当list有一个很大的长度时就无法完成排序

edcjyy 2019-02-16 04:45:07
python自己的sort函数是selection_sort和merge_sort结合的算法(我是在网上的视频课上看到的)
但是python会限制的你的递归深度,具体没试过,例如这段简单求和的代码
def mysum(n):
if n == 0:
return n
return n+mysum(n-1)
当mysum(9999)时就会有:
RecursionError: maximum recursion depth exceeded in comparison
当我的n值很大时就会报错达到最大深度,如图:


我就猜想,因为merge_sort时一个递归的方式来完成排序的,是不是当一个list很长很长的时候,merge_sort就会达到最大depth,而报错?
换句话说 python自家的sort或者sorted是不是不能给一个很长很长的list排序???
还有就是有问题请教,为什么python的sort会采用merge_sort,而其他流行的语言自己的sort是quick_sort?
python自学的初学者,不是很明白,谢谢大神答复。
...全文
214 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
手无护鸡之力 2019-02-18
  • 打赏
  • 举报
回复
引用 2 楼 edcjyy 的回复:
[quote=引用 1 楼 管理員 的回复:]
Python用的好像是叫蒂姆排序,貌似是插入和归并排序的结合?原理不是很明白,性能是优于快排的

对,是归并和插入结合,但是我想是不是当给一个很长的list排序时,会达到python的最大递归深度导致无法排序[/quote]
好像不会,会先报MemoryError;二分法收敛很快的
edcjyy 2019-02-18
  • 打赏
  • 举报
回复
引用 1 楼 管理員 的回复:
Python用的好像是叫蒂姆排序,貌似是插入和归并排序的结合?原理不是很明白,性能是优于快排的

对,是归并和插入结合,但是我想是不是当给一个很长的list排序时,会达到python的最大递归深度导致无法排序
手无护鸡之力 2019-02-18
  • 打赏
  • 举报
回复
Python用的好像是叫蒂姆排序,貌似是插入和归并排序的结合?原理不是很明白,性能是优于快排的

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧