0
병합 정렬을 구현하려고했지만 "최대 재귀 수준"오류가 계속 발생합니다. , 그것을 잡는 것이 아니라, 내가 i
는 0과 1이 점에 유의, 왜최대 재귀 수준에 도달했습니다. 병합 정렬
def mergesort(listin):
listlen = len(listin)
if listlen <= 1:
return listin
left = []
right = []
i = 0
while i < listlen:
if i <= listlen/2:
left.append(listin[i])
else:
right.append(listin[i])
i += 1
left = mergesort(left)
right = mergesort(right)
return merge(left, right)
def merge(listlef, listrig):
result = []
while len(listlef) != 0 and len(listrig) != 0:
if listlef[0] <= listrig[0]:
result.append(listlef[0])
listlef = listlef[1:]
else:
result.append(listrig[0])
listrig = listrig[1:]
while len(listlef) != 0:
result.append(listlef[0])
listlef = listlef[1:]
while len(listrig) != 0:
result.append(listrig[0])
listrig = listrig[1:]
return result
어쩌면 관련이없는 있지만 : 어떤 모두 당신에 추가 나열하는 단지 대체하지만, 이하 2/1 == 1.
대신 인덱스 만지작 있습니다 파이썬 3을 사용하면,'listlen/2'는 float를 반환합니다. 당신은'//'을해야합니다 (모든 파이썬 버전에서 작동합니다) –
입력이 충분히 길다면 최대 재귀 오류는 불가피합니다. – chepner
2 개의 숫자로만 발생하는 것을 잊어 버렸습니다. – user3800750