簡體   English   中英

在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM