导图社区 数据结构
对于正在全力备战计算机考研的同学以及计算机相关专业的学生而言,这张关于数据结构的思维导图模板无疑是一份不可多得的宝藏学习资料,是助力他们在计算机知识海洋中遨游的得力指南。在绪论部分,涵盖了数据结构的基本概念、算法的基本概念以及算法效率的度量等内容,为后续深入学习搭建起知识框架。线性表作为基础数据结构,详细介绍了线性表的定义、基本操作,以及顺序表和链表的实现方式,让学生清晰掌握线性数据的组织与存储。栈、队列和数组板块,讲解了栈和队列的特性、基本操作以及在不同场景下的应用,帮助学生理解特殊线性结构的使用方法。树和二叉树部分深入剖析了树的基本概念、存储结构,以及二叉树的遍历、线索化等重要知识,是掌握非线性数据结构的关键。图的结构则更为复杂,模板中详细阐述了图的定义、存储方式以及图的遍历、最短路径等算法,助力学生攻克图结构相关难题。查找和排序作为数据结构的重要应用,分别介绍了各种查找算法和排序算法的原理、实现及性能分析,让学生学会如何高效地查找和排序数据。无论是用于日常学习、课后复习,还是考研冲刺阶段的查漏补缺,它都能发挥巨大作用,帮助学生提升学习效率,在计算机学习的道路上稳步前行。
编辑于2026-03-19 14:34:58对于高等数学学习感到吃力的学生,尤其是正在紧张备考考研的同学来说,这张高数思维导图模板宛如一场“及时雨”,是一份不可多得的数学学习宝藏资料。从不定积分的概念、性质到计算方法,帮助学生掌握积分运算的基本技能,为后续学习奠定基础。多元函数微分学部分,详细介绍了多元函数的基本概念、偏导数、全微分等内容,使学生理解多元函数的微分特性。二重积分作为积分学在二维空间的应用,模板中清晰地展示了其概念、性质以及计算方法,助力学生解决实际问题。常微分方程板块,涵盖了常微分方程的基本概念、一阶微分方程、高阶微分方程等重要知识,让学生学会运用微分方程解决实际中的变化问题。这张思维导图采用简洁明了的图表和文字,将高数中错综复杂的知识点有机串联,形成了一个易于理解和记忆的知识网络。学生可以利用它进行课前预习,快速把握课程重点;课后复习时,能够查漏补缺,加深对知识点的理解;对于考研学生而言,更是复习备考的得力助手,帮助他们在有限的时间内高效复习,梳理知识体系,提升解题能力,在考试中取得理想的成绩,为后续的学术研究和职业发展打下坚实的数学基础。
对于线性代数学习存在困扰的学生,尤其是正在紧张备考考研的同学来说,这张线性代数知识图谱模板堪称“救星”,是一份不可多得的宝藏学习资料。从抽象的行列式公式,详细列举了行列式的基本性质与运算规则,为学生掌握这一基础工具提供了清晰的指引。矩阵部分更是内容丰富,涵盖了矩阵的概念、运算、逆矩阵以及矩阵的秩等关键内容,帮助学生构建起完整的矩阵知识体系。向量作为线性代数的重要组成部分,图谱中深入讲解了向量的线性相关性、线性表示等重要概念,为学生理解向量空间奠定基础。线性方程组部分,详细阐述了方程组的解的情况以及求解方法,使学生能够熟练运用所学知识解决实际问题。特征值和特征向量以及二次型等较为复杂的内容,在图谱中也得到了清晰的呈现,包括它们的定义、性质以及计算方法等,助力学生攻克学习难点。这张知识图谱采用图文并茂、逻辑清晰的形式,将线性代数中错综复杂的知识点有机串联,形成了一个易于理解和记忆的知识网络。学生可以利用它进行课前预习,快速把握课程重点;课后复习时,能够查漏补缺,加深对知识点的理解;对于考研学生而言,更是复习备考的得力助手,帮助他们在有限的时间内高效复习,提升解题能力,在考试中取得优异成绩。
对于正在全力备战计算机考研的同学以及计算机相关专业的学生而言,这张关于数据结构的思维导图模板无疑是一份不可多得的宝藏学习资料,是助力他们在计算机知识海洋中遨游的得力指南。在绪论部分,涵盖了数据结构的基本概念、算法的基本概念以及算法效率的度量等内容,为后续深入学习搭建起知识框架。线性表作为基础数据结构,详细介绍了线性表的定义、基本操作,以及顺序表和链表的实现方式,让学生清晰掌握线性数据的组织与存储。栈、队列和数组板块,讲解了栈和队列的特性、基本操作以及在不同场景下的应用,帮助学生理解特殊线性结构的使用方法。树和二叉树部分深入剖析了树的基本概念、存储结构,以及二叉树的遍历、线索化等重要知识,是掌握非线性数据结构的关键。图的结构则更为复杂,模板中详细阐述了图的定义、存储方式以及图的遍历、最短路径等算法,助力学生攻克图结构相关难题。查找和排序作为数据结构的重要应用,分别介绍了各种查找算法和排序算法的原理、实现及性能分析,让学生学会如何高效地查找和排序数据。无论是用于日常学习、课后复习,还是考研冲刺阶段的查漏补缺,它都能发挥巨大作用,帮助学生提升学习效率,在计算机学习的道路上稳步前行。
社区模板帮助中心,点此进入>>
对于高等数学学习感到吃力的学生,尤其是正在紧张备考考研的同学来说,这张高数思维导图模板宛如一场“及时雨”,是一份不可多得的数学学习宝藏资料。从不定积分的概念、性质到计算方法,帮助学生掌握积分运算的基本技能,为后续学习奠定基础。多元函数微分学部分,详细介绍了多元函数的基本概念、偏导数、全微分等内容,使学生理解多元函数的微分特性。二重积分作为积分学在二维空间的应用,模板中清晰地展示了其概念、性质以及计算方法,助力学生解决实际问题。常微分方程板块,涵盖了常微分方程的基本概念、一阶微分方程、高阶微分方程等重要知识,让学生学会运用微分方程解决实际中的变化问题。这张思维导图采用简洁明了的图表和文字,将高数中错综复杂的知识点有机串联,形成了一个易于理解和记忆的知识网络。学生可以利用它进行课前预习,快速把握课程重点;课后复习时,能够查漏补缺,加深对知识点的理解;对于考研学生而言,更是复习备考的得力助手,帮助他们在有限的时间内高效复习,梳理知识体系,提升解题能力,在考试中取得理想的成绩,为后续的学术研究和职业发展打下坚实的数学基础。
对于线性代数学习存在困扰的学生,尤其是正在紧张备考考研的同学来说,这张线性代数知识图谱模板堪称“救星”,是一份不可多得的宝藏学习资料。从抽象的行列式公式,详细列举了行列式的基本性质与运算规则,为学生掌握这一基础工具提供了清晰的指引。矩阵部分更是内容丰富,涵盖了矩阵的概念、运算、逆矩阵以及矩阵的秩等关键内容,帮助学生构建起完整的矩阵知识体系。向量作为线性代数的重要组成部分,图谱中深入讲解了向量的线性相关性、线性表示等重要概念,为学生理解向量空间奠定基础。线性方程组部分,详细阐述了方程组的解的情况以及求解方法,使学生能够熟练运用所学知识解决实际问题。特征值和特征向量以及二次型等较为复杂的内容,在图谱中也得到了清晰的呈现,包括它们的定义、性质以及计算方法等,助力学生攻克学习难点。这张知识图谱采用图文并茂、逻辑清晰的形式,将线性代数中错综复杂的知识点有机串联,形成了一个易于理解和记忆的知识网络。学生可以利用它进行课前预习,快速把握课程重点;课后复习时,能够查漏补缺,加深对知识点的理解;对于考研学生而言,更是复习备考的得力助手,帮助他们在有限的时间内高效复习,提升解题能力,在考试中取得优异成绩。
对于正在全力备战计算机考研的同学以及计算机相关专业的学生而言,这张关于数据结构的思维导图模板无疑是一份不可多得的宝藏学习资料,是助力他们在计算机知识海洋中遨游的得力指南。在绪论部分,涵盖了数据结构的基本概念、算法的基本概念以及算法效率的度量等内容,为后续深入学习搭建起知识框架。线性表作为基础数据结构,详细介绍了线性表的定义、基本操作,以及顺序表和链表的实现方式,让学生清晰掌握线性数据的组织与存储。栈、队列和数组板块,讲解了栈和队列的特性、基本操作以及在不同场景下的应用,帮助学生理解特殊线性结构的使用方法。树和二叉树部分深入剖析了树的基本概念、存储结构,以及二叉树的遍历、线索化等重要知识,是掌握非线性数据结构的关键。图的结构则更为复杂,模板中详细阐述了图的定义、存储方式以及图的遍历、最短路径等算法,助力学生攻克图结构相关难题。查找和排序作为数据结构的重要应用,分别介绍了各种查找算法和排序算法的原理、实现及性能分析,让学生学会如何高效地查找和排序数据。无论是用于日常学习、课后复习,还是考研冲刺阶段的查漏补缺,它都能发挥巨大作用,帮助学生提升学习效率,在计算机学习的道路上稳步前行。
数据结构
绪论
数据结构的基本概念
基本概念和术语
数据
数据元素
数据项
数据对象
数据类型
数据结构
数据结构的三要素
数据的逻辑结构
数据的存储结构
数据的运算
算法和算法的评价
算法的基本概念
算法效率的度量
时间复杂度 T(n)
空间复杂度 S(n)
线性表
线性表的定义和基本操作
线性表的定义
线性表的基本操作
线性表的顺序表示
顺序表的定义
顺序表上基本操作的实现
初始化
插入
删除
按值查找
线性表的链式表示
单链表的定义
单链表上基本操作的实现
初始化
带头结点
不带头结点
求表长
按序号查找结点
按值查找结点
插入结点
不带头结点且插入位置为1,需要更新头指针
删除结点
采用头插法建立单链表
采用尾插法建立单链表
双链表
插入
删除
循环链表
循环单链表
循环双链表
静态链表
顺序表换个链表的比较
存取(读/写)方式
逻辑结构与物理结构
查找、插入和删除
空间分配
栈、队列和数组
栈
栈的基本概念
栈的定义
栈的基本操作
栈的顺序存储结构
顺序栈的实现
顺序栈的基本操作
初始化
栈判空
入栈
出栈
读栈顶元素
共享栈
栈的链式存储结构
队列
队列的基本概念
队列的定义
队列常见的基本操作
队列的顺序存储结构
队列的顺序存储
循环队列
循环队列的操作
初始化
判队空
入队
出队
队列的链式存储结构
队列的链式存储
链式队列的基本操作
初始化
判队空
入队
出队
双端队列
输入/输出受限的双端队列
栈和队列的应用
栈在括号匹配中的应用
栈的表达式求值中的应用
算术表达式
中缀表达式转后缀表达式
手算方法
借助一个栈
后缀表达式求值
栈在递归中的应用
队列在层次遍历中的应用
队列在计算机系统中的应用
数组和特殊矩阵
数组的定义
数组的存储结构
特殊矩阵的压缩存储
对称矩阵
三角矩阵
三对角矩阵
稀疏矩阵
三元组表
失去随机存储特性
需要额外存储矩阵的行数和列数
十字链表
它为每个顶点设立两个链表,分别存储以该顶点为尾和以该顶点为头的弧,通过将弧节点按 “十字交叉” 形式组织,记录弧的起点、终点、头指针链域、尾指针链域等信息,从而高效存储有向图结构
串
串的定义和实现
串的定义
串的基本操作
串的存储结构
定长顺序存储
堆分配存储表示
块链存储表示
串的模式匹配
简单的模式匹配算法
KMP算法
KMP算法的原理
next数组的手算方法
next数组的推理公式
KMP算法的实现
KMP算法的进一步优化
nextval数组
树与二叉树
树的基本概念
树的定义
基本术语
祖先、子孙、双亲、孩子、兄弟、堂兄弟
结点的层次、深度和高度
结点的度和树的度
分支结点和叶结点
有序树和无序树
路径和路径长度
树的路径长度是指树根到每个结点的路径长的总和
森林
树的性质
树的节点数 n 等于所有节点的度数之和加1
度数为 m 的树中第i层上至多有 mi-1个 结点 (i≥1)
高度为 h 的 m 叉树至多有 (mh-1)(m-1) 个结点
度为 m 、具有 n 个结点的树的最小高度 h 为 élogm(n(m-1))+1ù
度为 m 、具有 n 个结点的树的最大高度 h 为 m-n+1
二叉树的概念
二叉树的定义
二叉树与度为2的有序树的区别
几种特殊的二叉树
满二叉树
完全二叉树
二叉排序树
平衡二叉树
正则二叉树
二叉树的性质
非空二叉树上的叶结点数等于度为 2 的节点数加 1 ,即 n0=n2+1
非空二叉树的第 k 层最多有 2k-1 个结点 (k≥1)
高度为 h 的二叉树至多有 2h-1 个几点 (h≥1)
完全二叉树性质
二叉树的存储结构
顺序存储结构
链式存储结构
二叉树的遍历和线索二叉树
二叉树的遍历
先序遍历
中序遍历
后序遍历
层次遍历
由遍历序列构造二叉树
由先序序列和中序序列构造二叉树
由后续序列和中序序列构造二叉树
由层序序列和中序序列构造二叉树
线索二叉树
基本概念
typedef struct ThreadNode{ ElemType data; // 数据元素,存储节点的数据 struct ThreadNode *lchild,*rchild; // 左、右孩子指针 int ltag,rtag; // 左、右线索标志 }ThreadNode,*ThreadTree;
中序线索二叉树的构造
中序线索二叉树的遍历
先序线索二叉树和后序线索二叉树
树、森林
树的存储结构
双亲表示法
孩子表示法
孩子兄弟表示法
树、森林与二叉树的转换
树转换为二叉树
每个节点的左指针指向它的第一个孩子,右指针指向它在树中的相邻右兄弟
森林转换为二叉树
按"层序"依次处理每个结点
处理一个结点的方法是:如果当前处理的结点有孩子,就把所有孩子结点“用右指针串成糖葫芦",并在二叉树中把第一个孩子挂在当前结点的左指针下方
二叉树转换为森林
按“层序“恢复每个结点的孩子
如何恢复一个结点的孩子:在二叉树中,如果当前处理的结点有左孩子,就把左孩子和“一整串右指针糖葫芦"拆下来,按顺序挂在当前结点的下方
树和森林的遍历
树的遍历
先根遍历
遍历序列与该树相应的二叉树的先序序列相同
后根遍历
遍历序列与该树相应的二叉树的中序序列相同
森林的遍历
先序遍历
中序遍历
树与二叉树的应用
哈夫曼树与哈弗曼编码
哈夫曼树的定义
带权路径长度
树的带权路径长度
哈夫曼树的构造
哈夫曼编码
固定长度编码
可变长度编码
前缀编码
并查集
并查集的概念
并查集的存储结构
并查集的基本实现
并查集实现的优化
Union
Find
图
图的基本概念
图的定义
基本概念及术语
有向图
无向图
简单图、多重图
简单图
不存在重复边
不存在顶点到自身的边
顶点的度(TD(v))、入度(ID(v))和出度(OD(v))
路径、路径长度和回路
路径
两顶点之间的顶点序列或相关联的边
简单路径、简单回路
简单路径
路径序列中,顶点不重复的路径
距离
子图
G=(V, E) ,并非V和E的任何子集都能构成G的子图
生成子图
V(G') = V(G)
连通、连通图和连通分量
连通分量
无向图中的极大连通子图
强连通图、强连通分量
注意:在无向图中讨论连通性,在有向图中讨论强连通性
生成树、生成森林
连通图的生成树是包含图中全部顶点的一个极小连通子图
注意:生成树是图,没有根结点
边的权、网和带权路径长度
完全图
稠密图、稀疏图
有向树
图的存储及基本操作
邻接矩阵法
用一个一维数组存储图中顶点的信息,用一个二维数组存储图中边的信息(各顶点之间的邻接关系)
邻接表法
顶点表+边表
十字链表
有向图的一种链式存储结构
顶点结点+弧结点
邻接多重表
无向图
图的基本操作
Adjacent(G, x, y)
Neighbors(G, x)
InsertVertex(G, x)
DeleteVertex(G, x)
AddEdge(G, x, y)
RemoveEdge(G, x, y)
FirstNeighbor(G, x)
NextNeighbor(G, x, y)
Get_edge_value(G, x, y)
Set_edge_value(G, x, y)
图的遍历
广度优先搜索
BFS算法的性能分析
空间复杂度
需借助一个辅助队列 Q
最坏情况下空间复杂度为 O(|V|)
时间复杂度
邻接表
O(|V|+|E|)
邻接矩阵
O(|V|2)
BFS算法求单源最短路径问题
广度优先生成树
深度优先搜索
DFS算法的性能分析
空间复杂度
需要借助递归工作栈
空间复杂度为 O(|V|)
时间复杂度
邻接表
O(|V|+|E|)
邻接矩阵
O(|V|2)
深度优先的生成树和生成森林
图的遍历与图的连通性
图的应用
最小生成树
Prim算法
从某一顶点开始,每次选与当前生成树邻接的最小权边对应的顶点加入生成树,重复直到包含所有顶点
时间复杂度
O(|V|2)
Kruskal算法
按边权从小到大选择边,每次选不构成环的边,直到选够 n-1 条边(n为顶点数)来构造最小生成树
时间复杂度
O( |E| log2|E| )
采用堆来存放边的集合,每次选择最小值的边需要O(log2|E|)的时间
最小生成树的代价
指构成该生成树的所有边的权重之和
最小生成树的代价唯一
MST唯一的条件
当带权连通图的任意一个环中所包含的边的权值均不相同,其MST是唯一的
最短路径
Dijkstra算法求单元最短路径问题
辅助数组
final[]、dist[]、path[]
算法步骤
时间复杂度
O(|V|2)
注意,边上带有负权值时,Dijkstra算法不适用
Dijkstra可以产生一棵生成树,但该树不一定是最小生成树
Floyd算法求各顶点之间最短路径问题
基本思想
时间复杂度
O(|V|3)
空间复杂度
O(|V|2)
注意,最短路径一定是简单路径
有向无环图描述表达式
在表达式的有向无环图表示中,不可能出现重复的操作数顶点
拓扑排序
AOV网
拓扑排序算法实现
时间复杂度
邻接表
O(|V|+|E|)
计算每个顶点入度 O|E|
找出入度为0的顶点 O|V|
将找到的入度为0的节点入队列,并删除入度为0顶点的边,同时边另一端的顶点入度减1,若减1后顶点入度变为0则重复该操作,每次删除O|1|,总共删除E条边,为O|E|
邻接矩阵
O(|V|2)
DFS实现拓扑排序的思想
逆拓扑排序
关键路径
AOE网
性质
源点&汇点(一个AOE网中仅各有一个)
关键路径
关键活动
参量定义
事件 vk 的最早发生事件 ve(k)
事件 vk 的最迟发生事件 vl(k)
活动 ai 的最早开始时间 e(i)
活动 ai 的最迟开始时间 l(i)
一个活动 ai 的最迟开始时间 l(i) 和其最早开始时间 e(i) 的差额 d(i) = l(i) -e(i)
活动的时间余量=结束顶点的最迟开始时间-开始顶点的最早开始时间-该活动的持续时间
查找
查找的基本概念
查找
查找表
静态查找表
关键字
平均查找长度
顺序查找和折半查找
顺序查找
一般线性表的顺序查找
有序线性表的顺序查找
折半查找 (二分查找)
折半查找判定树高
注意
仅适合于顺序存储数据结构,且要求元素按照关键字有序排列
每个元素查找概率不同时,平均查找长度可能大于顺序查找
判定树是一颗平衡二叉树
分块查找 (索引顺序查找)
分块查找的平均查找长度为索引查找和块内查找的平均长度之和
注意
快内元素可以无序,块间的元素是有序的
为使查找效率最高每个索引块的大小应为
树形查找
二叉排序树(BST)
定义
查找
插入
树中存在相同关键字的结点,插入失败
构造
删除
查找效率分析
查找、插入、删除
平均查找长度
最坏情况
平衡二叉树(AVL树)
定义
任意结点的左、右子树高度差的绝对值不超过1
平衡因子(-1、0、1)
插入
LL平衡旋转
RR平衡旋转
LR平衡旋转
RL平衡旋转
删除
LL、RR、LR、RL
假设出现最小不平衡子树根为z
插入操作仅需要对以z为根的子树进行平衡调整
删除操作先对以z为根的子树进行平衡调整,若调整后子树的高度减1,则可能需要对z的祖先结点进行平衡调整,甚至回溯到根结点
查找
补充
最少节点数递推公式
当按照关键字有序的顺序插入初始为空的平衡二叉树时,若关键字个数n满足下面条件时,该平衡二叉树一定是慢二叉树
红黑树
定义
红黑性质
每个结点或是红色,或是黑色
根节点是黑色
叶结点(虚构的外部结点、NULL结点)都是黑色
不存在两个相邻的红结点
对每个结点,从该节点到任意一个叶结点的简单路径上,所含黑节点的数量相同
结论
从根到叶结点的最长路径不大于最短路径的2倍
有n个内部节点的红黑树高度
插入
新插入红黑树中的结点初始着为红色
父节点是黑色,无需调整
插入根节点,着为黑色
插入节点z非根节点,父节点为红色
z的叔结点y是黑色,且z是一个右孩子
z的叔结点y是黑色,且z是一个左孩子
z的叔结点y是红色
删除
待删除节点有两个孩子
用该节点中序后继(或前驱)填补,转换为删除该后继(或前驱)结点
待删除结点只有左子树或右子树
该节点必然只有一个红色子结点
待删除结点没有孩子
结点为红色,直接删除
结点为黑色,设为x,其兄弟结点设为w
w是红色
w是黑色,w的右孩子是红色
w是黑色,w的左孩子是红色,w的右孩子是黑色
w是黑色,w的两个孩子是黑色
B树和B+树
B树及其基本操作
m阶B树
所有结点平衡因子均等于0
m路平衡查找树
特性
树中每个结点至多有m棵子树,至多有m-1个关键字
若根结点不是叶结点,则至少有2棵子树,至少有一个关键字
除根结点外所有非叶结点至少有ém/2ù棵子树
非叶结点的结构
所有的叶结点都出现在同一层次上,并且不带信息
B树的查找
在树中找结点
在结点内找关键字
B树的高度(磁盘存取次数)
插入
定位
插入
插入后关键字个数大于 m-1,必须对结点进行分裂
分裂的方法
ém/2ù 之前放在原结点,ém/2ù之后放入新结点,ém/2ù上的关键字插入到原结点的父节点中,若导致父节点关键字个数大于m-1则继续分裂
删除
直接删除关键字
删除关键字所在结点删除前关键字个数≥ém/2ù
兄弟够借
删除关键字所在结点删除前关键字个数=ém/2ù-1,且与该结点相邻的右(或左)兄弟结点的关键字个数≥ém/2ù,则需要调整该节点、右(或左)兄弟结点及其双亲节点,以达到新的平衡
兄弟不够借
合并
删除操作一定会导致叶结点的变化
B+树的基本概念
条件
每个分支结点最多有m棵子树
非叶根结点至少有两棵子树,其他分支节点至少有ém/2ù棵子树
结点的子树个数与关键字个数相等
所有叶结点包含全部关键字及指向其记录的指针,叶结点中将关键字按大小顺序排列,并且相邻叶结点按大小顺序相互连接起来
所有分支结点中仅包含它的各个子结点中关键字的最大值及指向其子结点的指针
散列(Hash)表
散列表的基本概念
散列函数(哈希函数)
Hash(key) = Addr
冲突
散列表
理想情况,对散列表进行查找的时间复杂度为
散列函数的构造方法
直接定址法
除留余数法
数字分析法
平方取中法
处理冲突的方法
开放定址法
线性探测法
容易产生聚集现象,即大量元素在散列表中相邻位置聚集的情况
平方探测法
采用的增量序列是非线性的,能减小冲突的概率
双散列法
伪随机序列法
在开放定址法的情形下,不能随便删除散列表中的某个元素,可能会导致搜索路径被中断,通常的做法是做删除标记,不是直接删除
拉链法
散列查找及性能分析的应用
散列表的查找效率取决于三个因素
散列函数
处理冲突的方法
装填因子
散列表的平均查找长度与装填因子α直接相关
排序
排序的基本概念
排序的定义
输入
输出
算法的稳定性
排序后不改变相同关键字元素的相对位置
内部排序、外部排序
插入排序
直接插入排序
性能分析
空间效率
时间效率
折半插入排序
将直接插入排序中的顺序查找替换为折半查找
性能分析
相比直接插入排序,减少了比较元素的次数
元素移动次数未改变,时间复杂度
希尔排序
缩小增量排序
性能分析
空间复杂度
时间复杂度
n在某个特定范围时
最坏情况
交换排序
冒泡排序
基本思想
性能分析
空间复杂度
时间复杂度
最后一趟无元素交换
快速排序
基本思想
枢轴
性能分析
空间效率
递归
平均
最坏
时间效率
时间复杂度
最坏
是所有内部排序算法中平均性能最优的排序算法
选择排序
简单选择排序
每一轮选择余下最小(大)元素与对应位置元素交换
性能分析
时间复杂度
空间复杂度
堆排序
堆
分类
大根堆
小根堆
构造初始堆
基于数组构造
依次插入构造
堆的删除操作及调整操作分析
性能分析
空间复杂度
时间效率
建堆时间
时间复杂度
归并排序、基数排序、计数排序
归并排序
二路归并排序
性能分析
空间效率
时间复杂度
基数排序
分类
最高位优先(MSD)
最低位优先(LSD)
性能分析
空间效率
时间效率
计数排序
算法步骤
空间效率
输出数组长度n
辅助的技术数组长度k
空间复杂度
时间效率
时间复杂度
子主题
各种内部排序算法的比较及应用
内部排序算法的比较
时间复杂度
空间复杂度
稳定性
稳定
插入排序
冒泡排序
归并排序
基数排序
不稳定
简单选择排序
快速排序
希尔排序
堆排序
适用性
仅适用于顺序存储
折半插入排序
希尔排序
快速排序
堆排序
使用顺序+链式存储
直接插入排序
冒泡排序
简单选择排序
归并排序
基数排序
过程特征
应用
n较小
直接插入排序
简单选择排序
n较大
快速排序
堆排序
归并排序
基本有序
直接插入排序
冒泡排序
n很大,记录的关键字位数较少,且可以分解
基数排序
记录本身信息量较大
链式存储
外部排序
外部排序的基本概念
外部排序的方法
外部排序的总时间 = 内部排序时间+外存信息读/写的时间+内部归并的时间
k路归并
内存分配 k 个输入缓冲区和1个输出缓冲区
步骤
生成 r 个初始归并段
进行 S 趟 k 路归并
优化
增加归并路数 k
代价
内存开销
归并时每次获取最小元素需要 k-1 次比较
减少初始归并段数量 r
多路平衡归并和败者树
败者树
k 个记录中选择最小关键字所需比较次数
置换-选择排序(生成初始归并段)
最佳归并树
理论基础
每个初始归并段对应一个叶子结点,把归并段的块数作为叶子的权值
归并树的 WPL = 树中所有叶结点的带权路径长度之和
归并过程的磁盘I/O次数 = 归并树的WPL * 2
构造
补充虚段
若 (初始归并段数量 - 1) % (k - 1) = 0
刚好可以构成严格k叉树,无需调价归并段
若 (初始归并段数量 - 1) % (k - 1) = u ≠ 0
需要补充 (k-1)-u个虚段
构造 k 叉哈夫曼树