병합 정렬에서 수행 된 스왑의 수를 찾는 방법은 다음과 같습니다. 계산이 완료되었지만 문제는 count 변수가 반환되지 않는다는 것입니다.병합 정렬의 스왑 수 (파이썬)
count=0
def mergesort(elist,count):
#print(count)
low=0
high=len(elist)
#print(len(elist))
if len(elist)<2:
return elist
mid=int((low+high)/2)
enlist=[]
y=mergesort(elist[:mid],count)
z=mergesort(elist[mid:high],count)
i=0
j=0
while(i<len(y) and j<len(z)):
if y[i]<=z[j]:
enlist.append(y[i])
i+=1
else:
count+=abs((len(y)+1)-i)
enlist.append(z[j])
j+=1
enlist+=y[i:];
enlist+=z[j:]
return enlist,count
i=0
list=[2,1,3,4,5,6,7]
print(mergesort(list,0))
스왑 카운트에 오류가 있으면 올바르게 수정하십시오. 감사합니다.
로 교체하려고? 들여 쓰기 코드를 올바르게 작성하고 문제를보다 정확하게 설명하십시오. – jonrsharpe
코드가 실행되도록 다시 포맷하십시오. 복사하여 붙여 넣기하면 SyntaxError가 29에서 반환됩니다. – timgeb