【问题标题】:How to add a comparison counter for merge sort in python?如何在python中为合并排序添加比较计数器?
【发布时间】:2017-07-25 07:40:21
【问题描述】:

我正在使用的代码如下。

我想在这段代码中添加一个比较计数器,但我现在拥有的那个将显示与元素数量相同的数字。

def MergeSort(argShuffledList):
    intNumOfComp = 0
    if len(argShuffledList)>1:
        intMidValue = len(argShuffledList)//2
        listLeftHalf = argShuffledList[:intMidValue]
        listRightHalf = argShuffledList[intMidValue:]

        MergeSort(listLeftHalf)
        MergeSort(listRightHalf)

        i=0
        j=0
        k=0
        while i < len(listLeftHalf) and j < len(listRightHalf):
            if listLeftHalf[i] < listRightHalf[j]:
                argShuffledList[k]=listLeftHalf[i]
                i=i+1
                intNumOfComp += 1
            else:
                argShuffledList[k]=listRightHalf[j]
                j=j+1
                intNumOfComp += 1

            k=k+1

        while i < len(listLeftHalf):
            argShuffledList[k]=listLeftHalf[i]
            i=i+1
            k=k+1
            intNumOfComp += 1

        while j < len(listRightHalf):
            argShuffledList[k]=listRightHalf[j]
            j=j+1
            k=k+1
            intNumOfComp += 1

    return argShuffledList, "Comparison Count: " + str(intNumOfComp)

【问题讨论】:

    标签: python algorithm sorting merge comparison


    【解决方案1】:

    您进行了递归,因此您没有计算左半列表和右半列表的比较。这是经过修改的正确代码。

    def MergeSort(argShuffledList):
        intNumOfComp = 0
    
        if len(argShuffledList)>1:
            intMidValue = len(argShuffledList)//2
            listLeftHalf = argShuffledList[:intMidValue]
            listRightHalf = argShuffledList[intMidValue:]
    
            left_part = MergeSort(listLeftHalf)
            right_part = MergeSort(listRightHalf)
    
            intNumOfComp += left_part[1] + right_part[1]
    
            i=0
            j=0
            k=0
            while i < len(listLeftHalf) and j < len(listRightHalf):
                intNumOfComp += 1
                if listLeftHalf[i] < listRightHalf[j]:
                    argShuffledList[k]=listLeftHalf[i]
                    i =i+1
    
                else:
                    argShuffledList[k]=listRightHalf[j]
                    j=j+1
    
                k=k+1
    
            while i < len(listLeftHalf):
                argShuffledList[k]=listLeftHalf[i]
                i=i+1
                k=k+1
                intNumOfComp += 1
    
            while j < len(listRightHalf):
                argShuffledList[k]=listRightHalf[j]
                j=j+1
                k=k+1
                intNumOfComp += 1
    
        return argShuffledList, intNumOfComp
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多