Python 中的合并排序函数

Merge Sort Function in Python

我在使用 Python 中的某些代码时遇到问题:

def sort(number_list):
    if len(number_list <= 1):
        return number_list
    front_list = []
    back_list = []
    counter = 0
    half = len(number_list)//2
    for x in number_list:
        if counter < half:
            front_list.append(x)
            counter += 1
        else:
            back_list.append(x)

    front_list = sort(front_list)
    back_list = sort(back_list)
    print(front_list)
    print(back_list)
    return merge(front_list, back_list)

def merge(front_list, back_list):
    output = []
    i = 0
    j = 0
    lenght1 = len(front_list)
    length2 = len(back_list)
    while i < lenght1 or j < length2:
        if i < lenght1 and j < length2:
            if front_list[i] <= back_list[j]:
                output += [front_list[i]]
                i = i + 1
            else:
                output += [back_list[j]]
                j = j + 1
        elif i < front_list:
            output += [front_list[i]]
            i = i+1
        else:
            output += [back_list[j]]
            j = j+1
    return output

我一直收到类型错误不可排序类型:list() <= int() 有人可以让我知道我哪里出错了吗?谢谢!

sort()函数中的if语句应该如下:

if len(number_list) <= 1:
    return number_list

此外,在 merge()

elif i < front_list:

应该是

elif i < lenght1:

仅供参考,您可以在使用 python 切片和稍微更改合并逻辑方面以某种方式简化您的逻辑:

def sort(number_list):
    if len(number_list) <= 1:
        return number_list
    half = len(number_list)//2
    front_list = sort(number_list[:half])
    back_list = sort(number_list[half:])
    print(front_list)
    print(back_list)
    return merge(front_list, back_list)

def merge(front_list, back_list):
    output = []
    j = 0
    for i in range(front_list):
        while j < len(back_list) and front_list[i] > back_list[j]:
            output.append(back_list[j])
            j += 1
        output.append(front_list[i])
    for x in range(j, len(back_list)):
        output.append(back_list[x])
    return output