Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的合并排序实现_Python - Fatal编程技术网

Python中的合并排序实现

Python中的合并排序实现,python,Python,我编写了这个函数,它将一个列表递归地分成两半,直到它的长度至少变为1或2 如果列表长度变为: 如果列表的长度变长,列表将按原样返回 列表的元素被交换,以便它们按升序排列并返回列表 问题是,在这段代码运行之后,输出是以列表的形式出现的,并且合并它们看起来像是一个无用的工作 该代码为给定调用生成以下输出: def merge_sort(arr): arr1 = [] arr2 = [] mid = int(len(arr)/2) if len(arr) == 1:

我编写了这个函数,它将一个列表递归地分成两半,直到它的长度至少变为1或2

如果列表长度变为:

  • 如果列表的长度变长,列表将按原样返回
  • 列表的元素被交换,以便它们按升序排列并返回列表 问题是,在这段代码运行之后,输出是以列表的形式出现的,并且合并它们看起来像是一个无用的工作

    该代码为给定调用生成以下输出:

    def merge_sort(arr):
        arr1 = []
        arr2 = []
        mid = int(len(arr)/2)
        if len(arr) == 1:
            return arr
        elif len(arr) > 2:
            arr1 = arr[0:mid]
            arr2 = arr[mid:len(arr)]
            return [merge_sort(arr1), merge_sort(arr2)]
        elif len(arr) == 2:
            if arr[0]>arr[1]:
                temp = arr[0]
                arr[0] = arr[1]
                arr[1] = temp
            return arr
    
    输出:

    merge_sort([5,4,1,8,7,2,6,3,9])
    
    在中,必须有一个
    merge
    函数,以便在合并的每个步骤中,对两个小部分进行排序。问题是,当数组大小为2时,您只是在交换两个数字

    [[[4, 5], [1, 8]], [[2, 7], [[6], [3, 9]]]]
    
    def合并(arr1、arr2):
    it1=0
    it2=0
    ret=[]
    当it1arr2[it2]:
    ret.append(arr2[it2])
    it2+=1
    其他:
    ret.append(arr1[it1])
    it1+=1
    回程网
    def合并_排序(arr):
    arr1=[]
    arr2=[]
    mid=int(长度(arr)/2)
    如果len(arr)==1:
    返回arr
    elif len(arr)>2:
    arr1=arr[0:mid]
    arr2=arr[mid:len(arr)]
    返回合并(合并排序(arr1),合并排序(arr2))
    elif len(arr)==2:
    如果arr[0]>arr[1]:
    温度=arr[0]
    arr[0]=arr[1]
    arr[1]=温度
    返回arr
    
    另外,我刚刚编辑了你的代码,做了一些小改动。您可以以更好的方式和更整洁的方式编写合并排序算法

    def merge(arr1,arr2):
        it1 = 0
        it2 = 0
        ret = []
        while it1 < len(arr1) or it2 < len(arr2):
            if it1 == len(arr1):
                ret.append(arr2[it2])
                it2+=1
            elif it2 == len(arr2):
                ret.append(arr1[it1])
                it1+=1
            else:
                if arr1[it1] > arr2[it2]:
                    ret.append(arr2[it2])
                    it2+=1
                else:
                    ret.append(arr1[it1])
                    it1+=1
        return ret
    
    
    
    def merge_sort(arr):
        arr1 = []
        arr2 = []
        mid = int(len(arr)/2)
        if len(arr) == 1:
            return arr
        elif len(arr) > 2:
            arr1 = arr[0:mid]
            arr2 = arr[mid:len(arr)]
            return merge(merge_sort(arr1), merge_sort(arr2))
        elif len(arr) == 2:
            if arr[0]>arr[1]:
                temp = arr[0]
                arr[0] = arr[1]
                arr[1] = temp
        return arr