归并排序的学习过程(代码实现)

news2024/12/26 11:38:26

归并排序的学习过程

在知乎上搜索相关内容:

先在必应和知乎上搜索归并排序的概念
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:
自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);
自下而上的迭代
主要思想:
分解(Divide):将n个元素分成个含n/2个元素的子序列。
解决(Conquer):用合并排序法对两个子序列递归的排序。
合并(Combine):合并两个已排序的子序列已得到排序结果。
算法步骤:

1申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;

2设定两个指针,最初位置分别为两个已经排序序列的起始位置;

3比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;

重4复步骤 3 直到某一指针达到序列尾;

5将另一序列剩下的所有元素直接复制到合并序列尾。

动画演示
在这里插入图片描述

知乎链接:排序算法之归并排序

B站学习视频

动态的图解了分解和合并的过程,用c代码实现的,讲的很细致,推荐大家去看。
截图展示部分递归代码:
在这里插入图片描述
在这里插入图片描述

归并排序【图解+代码】

python代码实现

#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]

实验结果
在这里插入图片描述

参考链接python实现归并排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/401841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作记录:举步维艰的在线 word 之旅 - tinymce

项目中需要实现 “在线编辑 word 模板” 的功能&#xff0c;我打算使用富文本组件 tinymce &#xff0c;因为业务需求比较特殊&#xff0c;研究一下 tinymce 是否能实现。 如何在 vue 项目中引用 tinymce&#xff0c;可以看另一篇文章 《在 vue 项目中使用 tinymce》 &#x…

HTML文档的基本结构

HTML文档以.html结尾&#xff0c;可以直接使用笔记本创建。 外部结构 <!DOCTYPE HTML><html></html>HTML文档外部结构由DOCTYPE和HTML构成。DOCTYPE告诉浏览器处理的是HTML文档&#xff0c;HTML规定使用HTML5标准。 然后是html元素&#xff0c;他告诉浏览…

基于Spring事件驱动模式实现业务解耦

事件驱动模式 举个例子&#x1f330; 大部分软件或者APP都有会有会员系统&#xff0c;当我们注册为会员时&#xff0c;商家一般会把我们拉入会员群、给我们发优惠券、推送欢迎语什么的。 值得注意的是&#xff1a; 注册成功后才会产生后面的这些动作&#xff1b;注册成功后的…

Flutter(五)容器类组件

布局类组件包含多个子组件&#xff0c;而容器类组件只包含一个子组件 目录填充&#xff08;Padding&#xff09;装饰容器&#xff08;DecoratedBox&#xff09;变换&#xff08;Transform&#xff09;Transform.translate 平移Transform.rotate 旋转Transform.scale 缩放Rotate…

C++中拷贝构造和赋值重载的注意事项以及编译器的优化处理

C中拷贝构造和赋值重载的注意事项以及编译器的优化处理前言1. 拷贝构造和赋值重载的易混淆点和注意事项1.1 易混淆点1.2 注意事项2.编译器对拷贝构造和赋值重载的优化处理前言 本文可以帮助你对下面&#xff1a; &#xff08;1&#xff09;何时调用拷贝构造何时调用赋值重载 &a…

多元统计分析、混合效应模型、结构方程模型、极值统计学、贝叶斯网络、copula

生态环境视角下的多元统计分析 1、多元数据分析:概念、定义、及应用困惑; 2、生态环境数据多元统计方法及应用情景; 3、生态环境多元数据分析预处理; 时长&#xff1a;2小时24分钟 结构方程模型&#xff08;SEM&#xff09;原理、构建流程及应用 1、结构方程模型基本原理 …

Windows 事件日志分析管理

Windows 设备是大多数商业网络中最受欢迎的选择。为了处理这些设备生成的数 TB 的事件日志数据&#xff0c;安全管理员需要使用功能强大的日志管理工具&#xff08;如EventLog Analyzer&#xff09;&#xff0c;该工具可以通过自动执行日志收集、解析、分析、关联和存档等过程来…

STM32—IIC

IIC协议概述 IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS公司在80年代开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备。IIC属于半双 工同步通信方式 特点 简单性和有效性。 由于接口直接在组件之上&#xff0c;因此IIC总线占用的空间非常小&…

信捷 XDH Ethercat A_WRITE指令

本指令修改指令轴的当前位置。 什么时候需要用本指令呢&#xff1f;换句话说&#xff0c;用本指令后&#xff0c;坐标原点修改了偏移了。如果在回原点后&#xff0c;往前走了一段距离x,如果是用绝对模式执行把位置修改成0&#xff0c;那么下一次开始每次做绝对运动A_MOVEA&…

黑客为什么戴盖伊福克斯面具

本文是是番外篇&#xff0c;是作者闲的没事把昼夜写完之后瞎写的文章 文章目录前言一、盖伊福克斯是谁&#xff1f;人物背景二、原因匿名面具背后的故事是什么&#xff1f;总结前言 在网上搜索黑客应该是戴帽子的或者是戴面具的 黑客在常人眼中是无所不能的可以上天入地&#…

vue-cropper 拖动图片和截图框

现象 开发遇到vue--cropper不能拖动图片和截图框 解决方法 can-move-box设置为true&#xff0c;表示可以拖动截图框 can-move设置为true&#xff0c;表示可以拖动图片 *注意&#xff1a; 我外层套了一个el-col, el-col的宽高一定要大于截图框的宽高&#xff0c;否则移动不了…

优化改进YOLOv5算法之添加GIoU、DIoU、CIoU、EIoU、Wise-IoU模块(超详细)

目录 1、IoU 1.1 什么是IOU 1.2 IOU代码 2、GIOU 2.1 为什么提出GIOU 2.2 GIoU代码 3 DIoU 3.1 为什么提出DIOU 3.2 DIOU代码 4 CIOU 4.1 为什么提出CIOU 4.2 CIOU代码 5 EIOU 5.1 为什么提出EIOU 5.2 EIOU代码 6 Wise-IoU 7 YOLOv5中添加GIoU、DIoU、CIoU、…

等离子纳秒高压脉冲电源维修HVP-20 P

等离子纳秒高压脉冲电源维修HVP-20 P;HVP-10B;HVP-05;HVP-02等型号均可维修 HVP-20 P(N)用于气体放电与低温等离子体的高性能纳秒高压脉冲电源。 HVP-20P(N)采用专有的marx电路&#xff0c;实现高压脉冲电源参数的便捷可调&#xff0c;包括峰值电压0 – 20 KV &#xff08;-2…

Go语言容器之map、list和nil

一、map map和C中map一样&#xff0c;里面存放的是key-value键值对在Go中map是引用类型&#xff0c;声明语法&#xff1a;var map变量名 map[key的类型]value的类型package mainimport "fmt"func main() {var mp map[string]intmpls : map[string]int{"one&quo…

不用写代码也能开发,产品经理是怎么做到的?

产品经理再也不用求开发了……就在前几天&#xff0c;我做的小程序上线了&#xff01; 从产品原型设计&#xff0c;前端开发后端开发&#xff0c;产品部署到运维&#xff0c;都是由我1个人完成的。 我是啥时候学会写代码的呢&#xff1f;不瞒你说&#xff0c;我一行代码都没写…

基于卷积神经网络CNN的甘蔗芽体自动识别,卷积神经网络分类预测

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN甘蔗芽体自动识别 基本结构 主要参数 MATALB代码 结果图 展望 背影 现在生活&#xff0c;为节能减排&#xff0c;减少…

LauterBach使用教程

工作需要&#xff0c;使用到劳得巴赫&#xff0c;但是公司只买了调试器&#xff0c;却没有买教程&#xff0c;所以就只能自己摸索和网上搜索这两种途径来学习。 注意&#xff1a;lauterbach可以使用命令来操作&#xff0c;但是由于本人刚刚使用&#xff0c;目前基本上使用的都…

[考前冲刺]计算机三级网络技术复习知识点总结·计算机三级网络技术重难点考前冲刺和解题技巧

选择题第一章重难点一、网络层次结构的功能①核心交换层的基本功能&#xff1a;1、核心交换层将多个汇聚层连接起来&#xff0c;为汇聚层的网络提供高速转发&#xff0c;为整个城域网提供一个高速、安全与具有QoS保障能力的数据传输环境&#xff1b;2、核心交换层实现与主干网络…

2023最新版会声会影更新下载及功能介绍

会声会影&#xff08;Corel VideoStudio&#xff09;为加拿大Corel发布的一款功能丰富的视频编辑软件。会声会影2023简单易用&#xff0c;具有史无前例的强大功能&#xff0c;拖放式标题、转场、覆叠和滤镜&#xff0c;色彩分级、动态分屏视频和新增强的遮罩创建器&#xff0c;…

Nuxt项目配置、目录结构说明-实战教程基础-Day02

Nuxt项目配置、目录结构说明-实战教程基础-Day02一、Nuxt项目结构1.1资源目录1.2 组件目录1.3 布局目录1.4 中间件目录1.5 页面目录1.6 插件目录1.7 静态文件目录1.8 Store 目录1.9 nuxt.config.js 文件1.10 package.json 文件其他&#xff1a;别名二、项目配置2.1 build2.2 cs…