2014-05-11 2 views
-3

병합 정렬에서 수행 된 스왑의 수를 찾는 방법은 다음과 같습니다. 계산이 완료되었지만 문제는 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)) 

스왑 카운트에 오류가 있으면 올바르게 수정하십시오. 감사합니다.

+0

로 교체하려고? 들여 쓰기 코드를 올바르게 작성하고 문제를보다 정확하게 설명하십시오. – jonrsharpe

+0

코드가 실행되도록 다시 포맷하십시오. 복사하여 붙여 넣기하면 SyntaxError가 29에서 반환됩니다. – timgeb

답변

0

Python에 새로 오셨습니까? 방금 들여 쓰기를 놓쳤습니다.
수정하십시오. More About Indentaiont.

코드는 다음과 같아야합니다.

def mergesort(elist, count): 
    #st1 
    #st2 
    while.. 
     #st3 
     #st4 
    return count 

들여 쓰기에 유의하십시오.

0

당신은 함수의 return 외부로 수 없습니다, 당신은 "반환 할 수없는"뜻은 무엇 returnprint

... 
print enlist,count