随笔分类 - 算法
摘要:从一个乱序的数组中依次取值,插入到一个已经排好序的数组中。 这看起来好像要两个数组才能完成,但如果只想在同一个数组内排序,也是可以的。此时需要想象出两个区域:前方有序区和后方乱序区。 设数组为a[0...n-1]。 初始时,a[0]自成1个有序区,无序区为a[1...n-1]。令i=1 将a[i]并
阅读全文
摘要:基本思想 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 回顾和简介 在介绍选择排序算法前,我们再回顾下冒泡算法。 冒泡算法是通过两两比较,不断交换,逐个推进的方式,来进行排序的。一次遍历,得到一个最值。 冒泡算法最费时的是什么? 一是两两比较 一
阅读全文
摘要:1 /* 2 @question: 不使用库函数将整数转为字符串 3 @author:CodingMengmeng 4 @date:2016-10-31 17:25:44 5 */ 6 #include <iostream> 7 using namespace std; 8 9 char* int2
阅读全文
摘要:堆——神奇的优先队列(下) --转自啊哈磊【坐在马桶上看算法】算法12:堆——神奇的优先队列(下) 接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间
阅读全文
摘要:堆——神奇的优先队列(上) --转自啊哈磊【坐在马桶上看算法】算法11:堆——神奇的优先队列(上) 堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这
阅读全文
摘要:二叉树 --转自啊哈磊【坐在马桶上看算法】算法10:二叉树 二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树。更加严格的递归定义是:二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 下面这
阅读全文
摘要:开启“树”之旅 --转自啊哈磊【坐在马桶上看算法】算法9:开启“树”之旅 我们先来看一个例子。 这是什么?是一个图?不对,确切的说这是一棵树。这哪里像树呢?不要着急我们来变换一下。 是不是很像一棵倒挂的树,也就是说它是树朝上, 而叶子朝下的。不像?哈哈,看完下面这幅图你就会觉得像啦。 你可能会问:树
阅读全文
摘要:巧妙的邻接表(数组实现) --转自啊哈磊【坐在马桶上看算法】算法8:巧妙的邻接表(数组实现) 之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。 4 5 1 4 9
阅读全文
摘要:Dijkstra最短路算法 --转自啊哈磊【坐在马桶上看算法】算法7:Dijkstra最短路算法 上节我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”。本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中
阅读全文
摘要:字符串匹配算法——KMP算法 转自——【经典算法】——KMP,深入讲解next数组的求解 一、字符串匹配 字符串匹配是计算机的基本任务之一。 字符串匹配是什么?举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可
阅读全文
摘要:Floyd最短路算法 转自啊哈磊【坐在马桶上看算法】算法6:只有五行的Floyd最短路算法 暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。 上图中有4个城市8条公路,公路上的数字表示这条公
阅读全文
摘要:栈——解密回文 转自啊哈磊【坐在马桶上看算法】算法5:解密回文——栈 上一节中我们学习了队列,它是一种先进先出的数据结构。还有一种是后进先出的数据结构它叫做栈。栈限定只能在一端进行插入和删除操作。比如说有一个小桶,小桶的直径只能放一个小球,我们现在向小桶内依次放入2号、1号、3号小球。假如你现在需要
阅读全文
摘要:队列——解密QQ号 --转自啊哈磊【坐在马桶上看算法】算法4:队列——解密QQ号 新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第1个数删除,
阅读全文
摘要:排序算法(三)快速排序 --转自啊哈磊【坐在马桶上看算法】算法3:最常用的排序——快速排序 冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,
阅读全文
摘要:Binary Search--二分查找 采用二分法查找时,数据需是排好序的。 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。 二分法
阅读全文
摘要:排序算法(二)冒泡法 --转自啊哈磊【坐在马桶上看算法】算法2:邻居好说话:冒泡排序 冒泡排序的基本思想: 从数组的第一个数开始,相邻两数进行比较,经过交换,小的数放在前面,大的数放在后面,一直到最后一个数与倒数第二个数比较完,这样比较一轮后,数组中最大的数“下沉”到了数组的最后,每一趟只能确定将一
阅读全文
摘要:排序算法(一)桶排法 --转自啊哈磊【坐在马桶上看算法】算法1:最快最简单的排序——桶排序 问题: 随机输入五个0-10之间的数,对输入的数由小到大排列 方法: 桶排法:用一个大小为11的一维数组,数组下标0~10分别表示分数0~10,不同的分数所对应单元格则存储得此分数的人数 代码: 1 #inc
阅读全文