笔记
文章平均质量分 53
日晚倦梳头因为有男友
程序媛一枚,致力于做大做强!
展开
-
排序算法(五)——快速排序
排序算法(五)简介1. 基本快速排序2. 快速排序优化总结简介排序算法总共可分为四类:序号排序名称基础算法优化算法1插入排序直接插入排序希尔排序2选择排序简单选择排序堆排序3交换排序冒泡排序快速排序4归并排序归并排序归并排序快速排序其实是对冒泡排序的优化。提示:下附代码,亲测可用1. 基本快速排序快速排序基于递归。基本步骤主要包括:选定基准点,将小于基准点的数据放于左边,大于基准点的数据放于右边。分别对基准点左边原创 2022-04-05 20:10:22 · 1406 阅读 · 0 评论 -
排序算法(四)——归并排序
排序算法(四)简介递归归并排序迭代归并排序总结简介什么是归并排序?归并排序就是将有n个记录的数据看做n个子序列,两个两个进行排序,然后合并,如此往复,直到形成n个记录的有序序列。这叫做2路归并排序。归并排序和希尔排序?归并排序将每次进行比较的子序列长度从1逐渐增加到n/2附近;希尔排序将每次进行比较的子序列长度从n/3+1逐渐降低到1.二者的算法复杂度都是O(nlogn)。具体来说,前者为O(nlog2n),后者为O(nlog3n).提示:以下是本篇文章正文内容,下面案例可供原创 2022-04-03 16:25:23 · 781 阅读 · 0 评论 -
排序算法(三)——堆排序
排序算法(三)简介代码简介堆排序是什么?像上篇的希尔排序是对直接插入排序算法的优化,堆排序是对选择排序的优化。因此其基本思想就是每次循环获取未被排序过数据中的最大值(或者最小值)。考虑到选择排序每次选出n个数据中的最值需要计算n-1次,因此堆排序的主要优化点就在于此。堆排序的复杂度为O(nlog2n)。堆排序的基本步骤?首先从下向上构造大顶堆(或者小顶堆),即根节点元素总是大于(或者小于)其孩子节点的树结构;此时的根节点即为最大(最小)元素,将最值元素(第1个元素)与第i个元素交原创 2022-04-01 23:02:04 · 295 阅读 · 0 评论 -
排序算法(二)——插入排序和希尔排序
排序算法(二)简介1. 直接插入排序2. 希尔排序总结简介本篇主要介绍两种排序方法:直接插入排序和希尔排序。直接插入排序:将记录直接插入到已经排好序的有序表中,从而得到一个新的记录数加1的有序表。希尔排序:缩小增量排序,一般与直接插入排序配合使用(当然用其他排序方法与希尔排序配合也是可以的),是直接插入排序的高效版本。提示:下附代码,亲测可用1. 直接插入排序#include <iostream>using namespace std;void InsertSort(int原创 2022-03-30 14:48:48 · 1186 阅读 · 0 评论 -
排序算法(一)——冒泡排序和选择排序
文章目录简介1. 冒泡排序1.1 简单的冒泡排序1.2 正宗的冒泡排序2. 选择排序总结简介排序算法就是根据关键字将数据(也叫记录)进行排序的过程。稳定的排序算法:若记录1和记录2的关键字k1 == k2,在排序之前记录1就排在记录2前面。排序之后记录1仍然排在记录2前面,则这种排序算法稳定。1. 冒泡排序冒泡排序的基本原理是将两两相邻记录进行对比,若反序则交换,直到没有反序的相邻记录为止。1.1 简单的冒泡排序#include <iostream>using namespa原创 2022-03-28 22:20:13 · 442 阅读 · 0 评论 -
动态查找(三)——哈希表
文章目录简介代码简介前面几篇文章分别介绍了静态查找,包含顺序查找和有序查找;还介绍了动态查找的一部分,包含二叉排序树和平衡二叉树。其实在树结构中的动态查找里,还包含红黑树(C++ STL中的map set就是基于红黑树实现的)、多态查找树即B树(多用于数据库查找和IO系统,可减少索引次数)。树结构的动态查找,其优势在于可以输出有序数据。而哈希查找的优势在于,能够快速检索。什么是哈希表?数据元素即关键字和存放关键字的地址之间存在一定的函数关系:关键字地址 = f(关键字),这叫做哈希函数。通过原创 2022-03-23 12:52:48 · 1055 阅读 · 0 评论 -
动态查找(二)——平衡二叉树
文章目录简介代码简介平衡二叉树又叫做AVL树,是以AV和L两人的名字命名的。什么是平衡二叉树?除非它是一棵空树,不然它的左子树和右子树都是平衡二叉树,且左子树深度与右子树深度绝对值之差不超过1.平衡二叉树比普通二叉平衡树的优势?考虑极端情况,有序数组存储形成的二叉排序树,查找尾部数据时,查找次数较多。平衡二叉树在索引过程中可以有效避免此情况,可以快速索引。平衡二叉树的劣势?需要额外的内存空间来存储结点深度信息;每次插入数据时都需检查平衡状态,并对不平衡状态做左旋/右旋处理。总的来说,原创 2022-03-21 00:03:55 · 864 阅读 · 0 评论 -
动态查找(一)——二叉排序树
文章目录1. 简介2. 代码1. 简介二叉排序树其实是一种挺成熟的数据结构了。其精妙之处在于实现搜索、插入、删除的手法。另外通过中序遍历,可以实现从小到大的数据排序。重点关注一下删除操作,假定要删除的元素为T,分情况讨论:T为NULL,返回false;T无左/右子树,则只需把T删掉;T既有左子树又有右子树:3.1 T的左子树仅有左子树,则只需删掉T;3.2 T的左子树s存在右子树,则将T的值替换为最大右子树的值,然后将最大右子树的左子树赋值给右子树上一阶的右子树。其他不做赘述,理原创 2022-03-19 23:19:53 · 686 阅读 · 0 评论 -
静态查找算法
文章目录简介一、顺序查找二、使用步骤1.引入库2.读入数据总结简介查找算法可分为静态查找和动态查找。静态查找指的是在查找过程中不需要对数据进行增删操作;动态查找指的是在查找过程中可以对数据进行增删操作。静态查找算法又可根据数据是否有序分为顺序查找和有序查找。顺序查找指的是数据无序即沿着数据分布挨个比对;有序查找方法有二分查找(折半查找)、插值查找、斐波那契查找。此外,还可通过对数据附加属性来实现线性索引查找,有稠密查找,即每个数据对应一个索引,通过查找索引实现数据查找;还有分区索引,顾原创 2022-03-18 22:47:14 · 1600 阅读 · 0 评论 -
关键路径和拓扑排序
文章目录简介几个问题:1. 拓扑排序2. 关键路径简介几个问题:关键路径和拓扑排序求什么?求关键路径。拓扑排序是求关键路径中的一环。关键路径是什么?举例来说,比如在造车过程中有如下的活动,那么哪条路径是关键路径呢?就是在所有路径中耗时最长的那条:开始——发动机完成——集中——组装完成,这条路径。如何判断是关键路径?ete == lte的活动为关键活动,其形成的路径为关键路径。提示:下附代码,亲测可用1. 拓扑排序拓扑排序就是对所有节点进行排序,保证节点的连接顺原创 2022-03-17 18:03:40 · 518 阅读 · 0 评论 -
最短路径——Dijkstra和Floyd算法
文章目录简介1. Dijkstra算法2. Floyd算法简介求最短路径的目的不必多说。通过设置权值,可以获取图中使用时间最短路径、途经路程最短路径等。求最短路径的两种算法:迪杰斯特拉算法 DIjkstra弗洛伊德算法 Floyd二者的主要区别在于:Dijkstra仅求解一个顶点到其余顶点的最短路径;Floyd求解所有顶点到其余顶点的最短路径。Dijistra的复杂度为O(n2),Floyd的复杂度为O(n3),但Floyd算法简洁优美,非常好看。提示:下附代码,亲测可用1. D原创 2022-03-14 23:02:05 · 1189 阅读 · 0 评论 -
最小生成树——Prim和Kruskal算法
文章目录简介1. Prim算法2. Kruskal算法总结简介求最小生成树的目的:最常见的便是,在多个途经点中计划出一条最快捷的路线。求最小生成树的两种算法:普利姆算法 Prim克鲁斯卡尔算法 Kruskal二者主要区别在于:Prim通过遍历图的顶点来寻找最小生成树;Kruskal通过遍历边来寻找。因此Prim的优势在于遍历稠密图,即点少边多的情况;Kruskal的优势在于遍历稀疏图,即边少点多的情况。提示:下附算法代码,亲测可用1. Prim算法Prim基于贪心算法,遍历各原创 2022-03-13 18:26:19 · 2024 阅读 · 0 评论 -
【DFS and BFS】
DFS: Depth First Search 深度优先搜索BFS: Breadth First Search 广度优先搜索原创 2022-02-26 22:54:57 · 286 阅读 · 0 评论