python实现归并排序

2023-05-16

排序算法:
python实现基数排序
python实现归并排序
python实现交换排序
python实现选择排序
python实现插入排序

归并排序
“归并"是将两个或者两个以上的有序表组成一个新的有序表。假定待排序表含有n个记录,则可以看成是n个有序的子表,每个子表长度为一,然后两两归并,得到n//2个长度为2或1的有序表;再两两归并,…直到合并成一个长度为n的有序表为止,这种方法称为2-路归并排序。
在这里插入图片描述
归并算法动态实现:
在这里插入图片描述
实现代码如下:

#merge的功能是将前后相邻的两个有序表归并为一个有序表的算法。
def merge(left, right):
    ll, rr = 0, 0
    result = []
    while ll < len(left) and rr < len(right):
        if left[ll] < right[rr]:
            result.append(left[ll])
            ll += 1
        else:
            result.append(right[rr])
            rr += 1
    result+=left[ll:]
    result+=right[rr:]
    return result

def merge_sort(alist):
    if len(alist) <= 1:
        return alist
    num = len(alist) // 2   # 从中间划分两个子序列
    left = merge_sort(alist[:num]) # 对左侧子序列进行递归排序
    right = merge_sort(alist[num:]) # 对右侧子序列进行递归排序
    return merge(left, right) #归并

tesl=[1,3,45,23,23,12,43,45,33,21]
print(merge_sort(tesl))
#[1, 3, 12, 21, 23, 23, 33, 43, 45, 45]

其中merge()函数用于将两个有序列表合并成一个有序列表,merge_sort()函数用于将一个无序列表排序。

归并排序的基本思想是将一个无序列表划分成两个子序列,对每个子序列进行递归排序,然后将两个有序子序列合并成一个有序列表。在merge()函数中,我们定义了两个指针ll和rr分别指向左侧子序列和右侧子序列的第一个元素,比较两个元素的大小,将较小的元素加入到结果列表中,并将指针向后移动。当一个子序列的元素已经全部加入到结果列表中时,我们将另一个子序列剩余的元素直接加入到结果列表中。

在merge_sort()函数中,我们首先判断当前列表的长度是否小于等于1,如果是,则直接返回该列表;否则,我们将列表从中间划分成两个子序列,并对每个子序列进行递归排序,然后将两个有序子序列合并成一个有序列表。
空间效率:需要n个辅助空间,因此空间复杂度为O(n)
时间效率:归并时间复杂度为O(n),一共进行log2 N趟,因此时间复杂度为O(nlog2 N)
它是一种稳定的排序算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现归并排序 的相关文章

  • CentOS7.6镜像下载

    一 xff0c 直接下载 https mirrors aliyun com centos vault 7 6 1810 isos x86 64 二 xff0c 官网下载 https www centos org download
  • Nginx支持quic协议及gcc版本升级

    第一种方式 xff1a Nginx官方nginx quic搭建 通过部署Nginx官方的QUIC分支来实现的浏览器和nginx quic服务器粗略的HTTP3通信 1 下载BoringSSL BoringSSL 是由谷歌开发 从 OpenS
  • Nginx添加自定义HTTP头字段

    nginx代码配置 以下配置的是https类型的监听器 xff0c 添加了多个proxy set header nginx常用变量https zhuanlan zhihu com p 619398840 在后端server节点上使用tcpd
  • Mybatis 和 Mybatis Plus 的区别

    Mybatis Plus Mybatis Plus是一个Mybatis的增强工具 xff0c 只是在Mybatis的基础上做了增强却不做改变 xff0c MyBatis Plus支持所有Mybatis原生的特性 xff0c 所以引入Myba
  • linux下备份一个目录下所有文件及目录

    一 关于Linux备份文件和应用的几个命令 xff1a tar和cp 在工作中 xff0c 经常来备份文件和系统应用 xff0c 常用到的主要是tar和cp命令 xff0c 分别介绍如下 xff1a 一 tar命令 xff0c 这个现在经常
  • linux服务器IO性能诊断

    1 在 Linux 服务器排查问题时 xff0c 一般会通过 top vmstat free netstat df h 等命令排查 CPU 内存 网络和磁盘等问题 有的时候我们需要更进一步了解磁盘 I O 的使用情况 基本命令 xff1a
  • 记 Ubuntu 19.04更改ip地址

    前言 从ubuntu从17 10开始 xff0c 已经不再在 etc network interfaces里配置IP xff0c 即使配置了也不会生效 xff0c 而是改成netplan方式 xff0c 配置写在 etc netplan 文
  • 批量安装centos7服务器

    利用PXE自动化安装centos7 前言 PXE的功能及原理 大概解释一下意思就是 xff1a 启动计算机的时候如果没有插入U盘以及光驱等介质的话 xff0c boot启动项是有一个从PXE启动的选项 xff0c 如果都没有则会从pxe启动
  • KairosDB 1.13安装手记

    PS xff1a 为了处理监控数据 xff0c 我们需要一个时间序列数据库 xff0c OpenTSDB是前驱 xff0c 但是是基于Hbase实现的 xff0c 后来有了一个基于Cassandra的实现 xff0c 就是KairosDB
  • Ubuntu 18.04 配置网卡聚合绑定与桥接

    Ubuntu 18 04 配置网卡聚合绑定与桥接 单网卡配置ip和多网卡配置ip 在之前的博客已经写过了 xff0c 这里写一下进阶的一些配置吧 Ubuntu 配置ip博客 xff1a https blog csdn net liuhaoy
  • ansible playbook 检查文件是否存在

    register 在ansible的playbook中task之间的相互传递变量 当我们需要判断对执行了某个操作或者某个命令后 xff0c 如何做相应的响应处理 xff08 执行其他 ansible 语句 xff09 xff0c 则一般会用
  • Ubuntu打开虚拟机报错could not open /dev/vmmon:?????? please make sure that the kernel moduel vmmon is load

    首先查看模块是否启动 etc init d vmware status 如果未启动使用start启动 etc init d vmware start 检查模块是否启动成功 etc init d vmware status 如果是网卡那一项f
  • linux 通过ip add 配置GRE隧道

    配置两台主机的 lo地址 xff0c 用来测试用 xff0c 如果不做gre的话 xff0c 互相是ping不同对方的回环地址的 注意环境是 主机1的ip xff1a 192 168 1 1 lo地址 xff1a 1 1 1 1 主机2的i
  • ansible-playbook debug输出区别与用法

    ansible playbook debug中var输出和msg输出的区别 msg xff1a 调试输出的消息 var xff1a 将某个任务执行的输出作为变量传递给debug模块 使用var的时候 xff0c 引用变量无需加上大括号 使用
  • 利用PXE批量进入救援模式修复多台主机的boot分区

    利用PXE自动化安装centos7 前言 PXE的功能及原理 大概解释一下意思就是 xff1a 启动计算机的时候如果没有插入U盘以及光驱等介质的话 xff0c boot启动项是有一个从PXE启动的选项 xff0c 如果都没有则会从pxe启动
  • shell 脚本 自动把登录失败次数超过5次的丢入iptables

    span class token shebang important bin bash span ip span class token operator 61 span span class token variable span cla
  • VMware 磁盘管理 虚拟机版本降级

    VMware降级在之前的文章里 卸载vmware 15版本虚拟机 xff0c 安装vmware14 最近在做虚拟机重命名 43 磁盘文件重命名 xff0c 在这里碰到了几次棘手的问题 VMware 虚拟机版本降级 如果你拿过来就是一个高版本
  • nginx 反向代理 解析域名变成ipv6

    今天碰到一个问题 xff0c 反向代理的域名解析成ipv6了 xff0c 然后主机不通ipv6 xff0c 就导致有时候能访问有时候链接超时的诡异情况 解决方法1 xff1a 通过关闭主机的ipv6来实现 图解centos7如何关闭ipv6
  • STANet

    A Spatial Temporal Attention Based Method and a New Dataset for Remote Sensing Image Change Detection 摘要 进行遥感图像变化检测 xff0
  • 传统行业的IT如何转向DEVOPS,运维如何转向SRE

    题记 xff1a 在菊厂这几年 xff0c 亲历了传统行业的IT部门如何在数字化转型的滚滚洪流中 xff0c 被裹挟着四处寻找光明 从15年至今 xff0c 参加了各式各样的培训 xff0c 最早是CI CD xff0c 后来推DEVOPS

随机推荐