数据结构与算法笔记(十一)—— 归并排序
什么是归并排序
归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组, 再合并数组。
将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数, 谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把 另一个数组的剩余部分复制过来即可。
算法步骤
- 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;
- 设定两个指针,最初位置分别为两个已经排序序列的起始位置;
- 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;
- 重复步骤 3 直到某一指针达到序列尾;
- 将另一序列剩下的所有元素直接复制到合并序列尾。
算法分析
归并排序的演示
时间复杂度
- 最优时间复杂度:O(nlogn)
- 最坏时间复杂度:O(nlogn)
- 稳定性:稳定
代码实现
def merge_sort(alist):'''归并排序'''n = len(alist)if n <= 1:return alistmid = n//2#left采用归并排序后形成的有序的新的列表left_li = merge_sort(alist[:mid])# right采用归并排序后形成的有序的新的列表right_li = merge_sort(alist[mid:])#将两个有序的子序列合并为一个新的整体left_pointer,right_pointer = 0,0result = []while left_pointer < len(left_li) and right_pointer < len(right_li):if left_li[left_pointer] <= right_li[right_pointer]:result.append(left_li[left_pointer])left_pointer += 1else:result.append(right_li[right_pointer])right_pointer += 1result += left_li[left_pointer:]result += right_li[right_pointer:]return resultif __name__ == '__main__':li = [7,3,5,1,6,4,8,2]print(li)result = merge_sort(li)print(result)
结果:
[7, 3, 5, 1, 6, 4, 8, 2]
[1, 2, 3, 4, 5, 6, 7, 8]
数据结构与算法笔记(十一)—— 归并排序相关推荐
- 数据结构与算法笔记(青岛大学王卓老师视频)
写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...
- JS数据结构与算法 笔记
JS数据结构与算法笔记 前言:不定时更新说明 1. 栈(Stack) 1.1 基于数组实现栈 1.2 基于对象实现栈 1.3 基于链表实现栈 1.4 栈的简单应用 1.4.1 字符串中的括号匹配问题 ...
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
- 数据结构与算法笔记(十六)—— 二叉搜索树
一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...
- 数据结构与算法笔记(十五)—— 散列(哈希表)
一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...
- 11_JavaScript数据结构与算法(十一)树
JavaScript 数据结构与算法(十一)树 树结构 什么是树? 真实的树: 树的特点: 树一般都有一个根,连接着根的是树干: 树干会发生分叉,形成许多树枝,树枝会继续分化成更小的树枝: 树枝的最后 ...
- 数据结构与算法笔记(王卓网课+教材+大话数据结构)
数据结构与算法笔记(王卓网课+教材+大话数据结构) ##最新整理!!! 顺序存储结构的线性表P10-P21 顺序线性表的代码实现 链式线性表笔记 串笔记 绪论.算法(P1-P9)1.4数据起源结构 数 ...
- 明翰数据结构与算法笔记V0.8(持续更新)
文章目录 前言 数据结构 `线性表` `数组` `链表` `栈与队列` [串/字符串] 树 并查集 `二叉树` [二叉排序树/二叉搜索树] `红黑树` 红黑树操作 霍夫曼树 `堆` [大/小]根堆 可 ...
- 数据结构与算法笔记 —— 十大经典排序及算法的稳定性
一.十大经典排序算法 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全 ...
- 数据结构与算法笔记总结
学习资源推荐: 1.程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦 程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦_v_JULY_v的博客-CSDN博客 2.推荐!数据结构 ...
最新文章
- android脚步---不同界面之间切换
- 20172311-哈夫曼编码测试
- 【CV】YOLOv4最全复现代码合集(含PyTorch/TF/Keras和Caffe等)
- python测试框架untest怎么循环执行_unittest如何在循环遍历一条用例时生成多个测试结果...
- Turbo码:3GPP TS 36.212
- 【论文】Awesome Relation Extraction Paper(关系抽取)(PART V)
- TImage、TPaintBox、TPicture、TBitmap、TCanvas、TGraphic 的关系与区别
- 软件测试宝藏图_tSQLt –数据库单元测试中被遗忘的宝藏
- cocos creator android之微信开放平台修改签名 baseResp.errCode=-6
- 想学习C语言,学习路线是什么?
- 敏捷开发之产品级经验分享
- ipcfg报错_CentOS服务器安装Anaconda
- 计算机组成原理符号标志,计算机组成原理之数据的表示及运算
- VOIP技术发展综述与外呼系统的关系
- 【BH区块链项目热点问答】加拿大石油公司利用废弃天然气为挖掘BTC提供动力。你怎么看?...
- 基于DPCA的线性监督分类的故障诊断方法-T2和SPE统计量的计算
- 四川大学计算机专业调剂,四川大学计算机学院(软件学院)2019考研调剂信息...
- 联想笔记本桌面计算机不见了,桌面上的图标不见了怎么办,教您桌面上的图标不见了怎么办...
- 量子计算 3 量子门与测量
- DDD---领域驱动设计(一)
热门文章
- rpgmaker mv修改_吴青峰版一点点MV 释出,唱作女帝陈珊妮执导
- 3. Leetcode 16. 最接近的三数之和 (数组-双向双指针)
- 机器学习笔记:(时间序列中的线性回归)如何选择预测变量
- Tableau实战系列Tableau基础概念全解析 (二)-万字长文解析数据类型及数据集
- tableau实战系列(三十九)-Tableau可视化之多种地图绘制汇总
- 机器学习算法与Python实践之(一)k近邻(KNN)
- Python中numpy库unique函数解析
- matplotlib-pie-绘制饼状图
- 数据算法:推荐系统的实践与思考(下)【转】
- 全链路监控方案概述与比较