我在实施快速排序算法时遇到了问题,就像在这种情况下python interpretor automaticlly restarting without returning answer一样。我找不到比这更类似的问题了。由于这篇文章自2012年以来一直处于非活动状态,问题没有解决,我决定再次提问。这是我的代码:
#coding:utf8
import time
import sys
sys.setrecursionlimit(1000000)
x=eval(input("Type a list: "))
start=time.time()
L=[]
R=[]
L_=[]
R_=[]
c=0
z=x[0]
for j in range(1,len(x)):
if x[j]>= z:
R.append(x[j])
elif x[j] <= z:
L.append(x[j])
def fun(x,lista,c):
for i in range(len(x)-1):
for j in range(i+1,i+2):
if x[i]<=x[j] and c!=len(x)-2:
c+=1
elif x[i]>x[j]:
lista.append(x[i])
lista.append(x[j])
x[i]=lista[1]
x[j]=lista[0]
lista=[]
c=0
return fun(x,lista,c)
elif x[i]<=x[j] and c==len(x)-2:
c=0
return x
fun(L,L_,c)
fun(R,R_,c)
print(L+[z]+R)
end=time.time()
print(end-start)
我正在使用的Python版本是3.4。如您所见,我使用sys
库来增加递归限制,但它没有解决我的问题。我测试了它,它可以对“X”数量的元素进行排序,其范围为300> X> 250,如果我是对的。我怎么解决这个问题?先感谢您。
答案 0 :(得分:0)
正常空闲(除非以-n开头)在用户子流程中运行用户代码。 RESTART行意味着子进程已重新启动。无论一个人如何开始空闲(没有-n),无论何时选择Shell - &gt;重启Shell Cntl + F6或Run - &gt;运行模块F5。
如果用户进程从程序错误中崩溃,也会发生RESTART。如果从命令行(python -m idlelib
或2.x中的... idlelib.idle
开始空闲,则可能会出现错误消息,但这不会发生在您的程序中。
我在用一个具体的作业替换输入行之后用3.4.3运行你的程序(你应该在发布之前完成)
x = list(reversed(range(1000)))
(对于许多排序算法,这种特殊选择是最坏的情况)。
我在命令窗口中没有看到任何内容,但确实看到了python.exe已停止工作的Windows消息。由于Idle仍在运行,这引用了错误过程。
将1000000减少到10000并没有改变任何东西。将递归限制保留为1000会导致长时间追溯。
Traceback (most recent call last):
File "C:\Programs\python34\tem.py", line 33, in <module>
fun(L,L_,c)
File "C:\Programs\python34\tem.py", line 29, in fun
return fun(x,lista,c)
....
File "C:\Programs\python34\tem.py", line 29, in fun
return fun(x,lista,c)
File "C:\Programs\python34\tem.py", line 18, in fun
for i in range(len(x)-1):
RuntimeError: maximum recursion depth exceeded in comparison
将列表缩小为100并未改变结果。你有一个无限循环,你需要阻止它。
您的代码看起来不像我熟悉的quicksort版本。也许您应该查看算法的定义。
然而,这一行
对于范围内的j(i + 1,i + 2):
看起来像一个bug,因为它只用j = i+1
迭代一次。实际上,如果用该行代替它,程序就会运行相同的程序并且代替以下几行。
在任何情况下,都不符合终止条件x[i]<=x[j] and c==len(x)-2
。我建议从一个只有几个项目的简短列表开始,然后从打印语句添加到fun
,看看价值如何偏离您的期望。您也可以尝试手动执行算法。
答案 1 :(得分:0)
我正要问同样的问题,因此对于stackoverflow感到不满。
我的Python在长python程序期间重新启动,更具体地说,主要是在调用外部程序的程序期间(例如在调用FFMPEG或使用system.os命令调用Tesseract时)。
我的搜索引发了我关于stackoverflow的4个问题,我学到了以下内容:
Python IDLE在子进程中运行用户代码,如果此子进程崩溃,则会发生RESTART。 (感谢Terry Jan Reedy)。
我认为这是我的问题(子流程崩溃)。
起初,我虽然这是一个硬件问题:我测试了我的CPU,检查了我的硬盘,用Memtest测试了我的RAM ......并没有检测到错误。
然后我在我的第二台计算机上运行我的程序,这与我的第一台计算机完全相同:第二台计算机上的一切正常,但第一台计算机上没有。
之后我运行了SystemFileCheck(我使用的是Windows),看到我的操作系统出现无法解决的问题。
最后我删除了操作系统分区并重新安装了Windows。
现在一切都很好。 - &GT;所以我的Windows无缘无故地杀死了我的python进程。
结论:
修复:检查程序是否存在错误,然后重新安装或重新安装操作系统。