mergesortを使って数字のリストをソートし、ソート方法(バブル、選択など)によってさまざまな長さのリストをソートするのにかかる時間がどのように異なるか比較します。シャッフルシャッフルソートのための私のコードで、これはマージソートと選択ソートに変更します比較エラーpythonで最大再帰深度を超えましたか?
k=0
times=[]
while k<n:
x=list(range(1,2**k))
shuffle(x)
start=clock()
selectionsort(x)
end=clock()
times.append(end-start)
k=k+1
return(times)
:だから私はこれをテストするために、次のコードを使用します。シャッフルソートと選択ソートをテストすると、必要に応じてコードが実行されますが、mergesortをテストすると、比較エラーで最大再帰深度を超えます。次のようにマージソートのための私のコードは次のとおりです。
def mergesort(list):
if len(list) == 1:
return list
m = len(list)//2
l = mergesort(list[:m])
r = mergesort(list[m:])
if len(l)<1 or len(r)<1:
return l or r
result = []
i = j = 0
while (len(result)<len(r)+len(l)):
if l[i] < r[j]:
result.append(l[i])
i = i+1
else:
result.append(r[j])
j = j+1
if i == len(l) or j == len(r):
result.extend(l[i:] or r[j:])
break
return result
私はこのエラーを取得される可能性がありますなぜ、誰でも提案することができますか?前もって感謝します!
マージソートの仕組みをお読みになることをお勧めします。これは、2つの異なる関数から構築されます.1つはリストを2つの関数に分割する関数、もう1つは関数をマージする関数です。 https://en.wikipedia.org/wiki/Merge_sort – Nf4r
エラーの完全なスタックトレースと、実際の入力を関数に投稿してください。 – poke