【问题标题】:Merge Sort Using Python使用 Python 进行合并排序
【发布时间】:2016-01-06 12:04:26
【问题描述】:

我没有得到排序列表,而是只有一个值。

def merge1(left,right):
    print("left" , left , "right" , right)
    def loop(left,right,ss):
        print("left" , left , "right" , right)
        if not (left ==[] or right ==[]):
            if left[0] <= right[0]:
                ss.append(left[0]) 
                return loop(left[1:],right, ss)
            else:
                ss.append(right[0])
                return loop(left,right[1:], ss)
            print("hello")
        else:
            return ss
    return loop(left,right,[])


def msort(s):
    if len(s)>1:
        mid = len(s) // 2
        return merge1(msort(s[:mid]),msort(s[mid:]))
    else:
        return s

print(msort([9,8,7,6,5,4,3,2,1]))

【问题讨论】:

标签: python sorting merge


【解决方案1】:

您没有解决左侧或右侧数组中的任何一个已用尽的情况。您必须将剩余值从非空数组复制到合并数组:

def merge1(left,right):
    print("left" , left , "right" , right)
    def loop(left,right,ss):
        print("left" , left , "right" , right)
        if left and right:
            if left[0] <= right[0]:
                ss.append(left[0]) 
                return loop(left[1:],right, ss)
            else:
                ss.append(right[0])
                return loop(left,right[1:], ss)
        # either one of left or right is empty so you need to copy the remaining
        # values into merged array
        else:
            if left:
                for i in left:
                    ss.append(i)
            if right:
                for i in right:
                    ss.append(i)
            print ss
            return ss
    return loop(left,right,[])


def msort(s):
    if len(s)>1:
        mid = len(s) / 2
        return merge1(msort(s[:mid]),msort(s[mid:]))
    else:
        return s

print(msort([9,8,7,6,5,4,3,2,1]))

【讨论】:

  • 谢谢,意思是left或者right都用尽了,还是在合并数组中?
  • 是的,假设您正在合并两个列表,其中一个为空([1, 2, 3], []) 您需要返回 [1, 2, 3] 作为合并后的数组,在您的原始代码中,这没有实现。
猜你喜欢
  • 2016-06-16
  • 1970-01-01
  • 2011-04-01
  • 2022-01-10
  • 2018-10-16
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多