Python编写归并排序算法的实现方法 您所在的位置:网站首页 长度算法 Python编写归并排序算法的实现方法

Python编写归并排序算法的实现方法

2023-03-26 22:55| 来源: 网络整理| 查看: 265

本文是本人在学习左神的java代码后改写为的python代码 归并排序算法的步骤是 如,对 [1, 2, 4, 9, 3, 55, 25, 64] 对分,对左半边和右半边进行递归 递归的终止条件是输入list的长度为1 如,对[11, 2, 4, 9, 3, 55, 25, 64]中 其左半边不断对分后 为[11, 2, 4, 9] [11, 2] [11] [2] 然后对二者进行merge merge的规则是 开辟一个额外空间 设置左右指针,分别指左右半边的start 将更小的放在空间左边 process(arr,l,.mid) process(arr,mid+1,r) merge(arr,l,mid,r)

注意 1、mid = l + ((r-l)>>1) 这样即可找到奇数长度list的中点 或者偶数长度list的左中点 2、如何进行merge? 开辟的新空间是一个长度为r+1-l的数组 填充后 将空间中的元素按顺序填进 原数组arr的[l:r+1]中

def process(arr,l,r):if l == r:return 0mid = l + ((r-l)>>1)process(arr,l,mid)#0 3process(arr,mid+1,r) merge(arr,l,mid,r)return arrdef merge(a,l,mid,r):left = lright = mid + 1temp = []while left mid and right r:if a[left] a[right]:temp.append(a[left])left += 1else:temp.append(a[right])right += 1while left mid:temp.append(a[left])left += 1while right r:temp.append(a[right])right += 1for i in range(l,r+1):a[i] = temp[i-l]return templength = 8#int(input())arrx = [1, 2, 4, 9, 3, 55, 25, 64]#[int(x) for x in input().split(' ')]flag = 0direction = 1 if flag == '1' else 0res = process(arrx,0,length-1)resstr = ''for x in res:resstr += str(x) + ' 'resstr = resstr[:-1] if direction == 0 else resstr[:-1][::-1]print(resstr)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有