归并排序python实现

一 原理

分治原理:分而治之

将无序数列一分为二,二分为四,.....直到分成的子序列只含有一个元素;

元素两两排序合并,四四排序合并....全部排好后形成新的有序数列

二 关键点

  1. 需要两个函数来实现,其一是分,其二是和(保证有序)
  2. 分的函数:实现的原则是不断一分为二,不断运行分的函数,直到序列的长度只含有1个元素,此时开始合并
  3. 和的函数:目的实现有序;两个合并的数列本身是有序的,两个数列a,b最小的元素开始比较,小的(例如a中)放入新的(空)数列的1号位,然后a中第二小的继续和b的最小元素比较,知道有一个数列所有元素全部放入新的数列中,此时把剩下的数列添加到新数列的后面。
  4. 代码实现:某一元素的添加:append();某一数列的添加:extend.()

三 python 实现

data=[1,3,2,4]
def merge(a,b):
    result=[]
    i=0
    j=0
    while i<len(a) and j<len(b):
        if a[i]<b[j]:
            result.append(a[i])
            i=i+1
        else: 
          result.append(b[j])
          j=j+1
    result.extend(a[i:])
    result.extend(b[j:])
    return result
def sorts(data):
    length=len(data)
    if length<=1:
        return data
    mid=length//2
    a=sorts(data[:mid])
    b=sorts(data[mid:])
    return merge(a,b)

#sort_data = sorts(data);

print(sorts(data))

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值