归并排序中的交换次数(Python)

-3 投票
2 回答
1004 浏览
提问于 2025-04-18 06:11

我应该怎么计算在归并排序中进行的交换次数呢?这里有一个算法。虽然计算次数的部分已经完成,但问题是:这个计数的变量没有被返回。

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))

如果交换次数的计算有错误,也请修正一下。谢谢!

2 个回答

0

你不能在函数外面使用 return,试着把 return 换成 print

...
print enlist,count
0

你是刚接触Python吗?你刚刚漏掉了缩进。
请把它改正过来。 了解更多关于缩进的内容

你的代码应该像这样。

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

注意缩进哦。

撰写回答