当前位置: 首页 > news >正文

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

归并排序的学习过程

在知乎上搜索相关内容:

先在必应和知乎上搜索归并排序的概念
归并排序(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, 0result = []while ll < len(left) and rr < len(right):if left[ll] < right[rr]:result.append(left[ll])ll += 1else:result.append(right[rr])rr += 1result+=left[ll:]result+=right[rr:]return resultdef merge_sort(alist):if len(alist) <= 1:return alistnum = 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.lryc.cn/news/38468.html

相关文章:

  • add_header重写的坑
  • 跑步耳机入耳好还是不入耳好,最适合运动的蓝牙耳机
  • 深度学习知识点简单概述【更新中】
  • 【编程基础】009.输入两个正整数m和n,求其最大公约数和最小公倍数。
  • Golang错误处理
  • English Learning - L2 语音作业打卡 复习对比 [ɑ:] [æ] Day18 2023.3.10 周五
  • LabVIEW中以编程方式获取VI克隆名称
  • Mysql count(*)的使用原理以及InnoDb的优化策略
  • 一文入门HTML+CSS+JS(样例后续更新)
  • 【STL】Vector剖析及模拟实现
  • 数据库建表的一些技巧
  • 线程(一)
  • [深入理解SSD系列 闪存实战2.1.8] NAND FLASH Multi Plane Program(写)操作_multi plane 为何能提高闪存速度
  • 计算机网络(第八版)——第一章知识总结
  • Linux学习笔记
  • 树与二叉树(概念篇)
  • C++回顾(二十五)—— map/multimap容器
  • 7.3 向量的数量积与向量积
  • Qt静态扫描(命令行操作)
  • 【Hadoop】配置文件
  • python进程池
  • 笔记本固态盘数据丢失怎么办?笔记本固态盘怎么恢复数据
  • 堆的结构与实现
  • Pandas快速入门
  • LVGL学习笔记18 - 表Table
  • 嵌入式安防监控项目——html框架分析和环境信息刷新到网页
  • centos安装docker详细步骤
  • 初识HTML、W3C标准、如何利用IDEA创建HTML项目、HTML基本结构、网页基本信息
  • 为什么程序员喜欢这些键盘?
  • JS中数组去重的几种方法