在Python中合并排序函数

时间:2015-04-02 15:51:49

标签: python sorting merge

我在使用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()&lt; = int() 有人能让我知道我哪里出错吗?谢谢!

2 个答案:

答案 0 :(得分:0)

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

if len(number_list) <= 1:
    return number_list

此外,在merge()

elif i < front_list:

应该是

elif i < lenght1:

答案 1 :(得分:0)

仅供参考,您可以简化逻辑somehwat,无论是在使用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