Python实现归并排序的两种方法

本文介绍了归并排序的两种Python实现方法:递归方式和分治方式。递归方式通过定义merge函数来合并两个有序子数组,而分治方式则通过不断将数组拆分为更小的部分再合并来完成排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种

#归并排序(递归)的python实现
def merge(li,p,q,r):
    n1 = q - p + 1
    n2 = r - q
    L = []
    R = []
    for i in range(n1):
        L.append(li[p+i])
    for j in range(n2):
        R.append(li[q+1+j])
    i = 0
    j = 0
    k = p
    while i<len(L) and j<len(R):
        if L[i]<R[j]:
            li[p] = L[i]
            p += 1
            i += 1
        else:
            li[p] = R[j]
            p += 1
            j += 1
    if i<len(L):
        li[p] = L[i]
        i += 1
        p += 1
    if j<len(R):
        li[p] = R[j]
        p += 1
        j += 1

def MergeSort(li, p, r):
    if p < r:
        q = int((p+r)/2)
        MergeSort(li, p, q)
        MergeSort(li, q+1, r)
        merge(li, p, q, r)

if __name__ == '__main__':
    l = [3,41,52,26,38,57,9,49]
    MergeSort(l,0,len(l)-1)
    print(l)

第二种

#Python实现归并排序
def Merge(left, right):
    li = []
    i = 0
    j = 0
    while i<len(left) and j<len(right):
        if left[i] < right[j]:
            li.append(left[i])
            i += 1
        else:
            li.append(right[j])
            j += 1
    if i<len(left):
        li = li + left[i:]
    if j<len(right):
        li = li + right[j:]
    return li
def MergeSort(li):
    if len(li)<=1:
        return li
    q = int(len(li)/2)
    ll = MergeSort(li[:q])
    rr = MergeSort(li[q:])
    lll = Merge(ll,rr)
    return lll

li = [3,41,52,26,38,57,9,49]
print(MergeSort(li))
print(li)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值