归并排序

       归并的意思是将两个或两个以上的有序表组合成一个新的有序表。而归并排序是在归并操作上的一种有效的排序算法,该算法是采用分治法的一个有效应用。
先使得序列有序,然后对有序序列进行合并。
def merge(left,right):
    l,r=0,0
    result=[]
    while l<len(left) and r<len(right)://当一个数组中全部取光就退出循环
        if left [l] < right [r]://比较两个数组中,未添加到result中的
                                //元素,中最小元素的大小
                                //然后取出较小者,添加到result中
            result.append(left[l])
            l+=1
        else:
            result.append(right[r])
            r+=1
    if l<len(left)://判断left中的元素是否全部添加到result中,
                    //如果没有,则将剩下的添加到result中。否则,将right中的剩下
                    //的元素添加到result中。
        result+=left[l:]
    else:
        result+=right[r:]
    return result
在python中,定义Merge函数,用来合并两个序列。需要传入的参数为两个有序的序列。设置两个数l,r分别代表序列left和right中需要比较的数字的索引。还需设置一个result来表示Merge函数返回的结果。
函数的整体意思相当于,合并两摞从小到大、正面朝上的扑克牌。显然,两摞牌中都只能看见最上面的那张牌。而我们需要做的是,就是比较可以看见的两张扑克的大小,取出小者,放在手里,不改变朝向,然后继续比较可以看见的两张扑克,取出小者放在先前取出的扑克的下面。不断执行,直到一摞扑克取光,就可以将剩下的一摞扑克,整体放到手里的那摞扑克下面。就这样完成了将两摞有序扑克合并成一摞有序扑克的操作。
最后的一个if就是判断哪个序列,还剩下部分,然后将剩下的部分全部添加到result后面。
def mergeSort(list):
    if len(list)==1:
        return list
    middle=len(list)//2
    left=mergeSort(lists[:middle])
    right=mergeSort(lists[middle:])
    return merge(left,right)
然后就是MergeSort函数。如果传如的数组长度为1,则直接返回结果,因为不用比较大小。整体的思想就是,不断分割数组的长度,直到长度为1,然后开始合并。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值