【问题标题】:Recursive Merge Sort with non-recursive merge递归合并排序与非递归合并
【发布时间】:2025-02-21 01:20:02
【问题描述】:

我正在尝试编写递归合并排序算法,但是我的合并算法不是递归的。

有人告诉我在下面的函数中使用以下参数。

def merge(left_buffer, right_buffer, data):
    
    "Merges two sets of data together by comparison"
    print("MERGING",left_buffer,"and",right_buffer)
    #Dual iteration
    m = 1
    n = 1
    k = 0
    j = 0
    for i in range(len(data)):
        if len(left_buffer) == 0:
            data[i] = right_buffer[k]
            k+=1
        elif len(right_buffer) == 0:
            data[i] = left_buffer[j]
            j += 1
        elif left_buffer[0] < right_buffer[0]:
            data[i] = left_buffer[0]
            left_buffer = left_buffer[1:]
            
        else:
            data[i] = right_buffer[0]
            right_buffer = right_buffer[1:]
    print('Result of the merge:',data)

这是我将两个数据集合并为另一个数据集的功能。

然后是我的递归归并排序算法:

def merge_sort(data):
    "Merge sort recursion"
    if len(data) == 1:
        return [data[0]]
    else:
        half_length = len(data)//2
        left_half = data[0:half_length]
        right_half = data[half_length:]
        
        #Only sorting the left side
        left = merge_sort(left_half)
        right = merge_sort(right_half)
        
        return merge(left,right,data)


我收到的主要问题是,在最终合并两个列表时,我发现我正在合并 None 类型。

我不知道如何解决这个问题。

也许我的合并算法不正确,但是我的导师说没问题。

【问题讨论】:

    标签: python recursion mergesort


    【解决方案1】:

    您的merge 方法不会返回任何内容,因此当您的merge_sort 方法返回时,它也会返回None

    这些None 值被传递到leftright,然后你将它们传递到你的merge 方法中。

    也许您希望您的merge_sort 方法进行合并,然后返回合并后的数据?即:

        merge(left,right,data)
        return data
    

    或者,您可以修改merge,使其返回合并的数据,方法是将return data 行添加到它的末尾。

    【讨论】: