![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
不了痕
风景很美,常回头看看
展开
-
面试官问你:哪几行代码能保证算法稳定性?
遵从百度百科解释,算法稳定性定义如下:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。之前面试前没了解过,胡乱一说算法稳定性就是保证算法计算一次和计算多次结果都是一样的# #,现在想来这种...原创 2020-03-15 20:42:15 · 629 阅读 · 0 评论 -
算法的稳定性
算法稳定性的定义假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。判断方法对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的...原创 2020-03-03 21:13:54 · 6653 阅读 · 1 评论 -
【我是一棵树】B树、B+树
多路查找树(B树)其每个节点的孩子数可以多于两个,且每一个节点处可以存储多个元素。2-3树其中每个节点都具有两个孩子(我们称它为2节点)或者3个孩子(3节点)。2-3-4树就是2-3树点的扩展,包括了4个节点的使用B树是一种平衡的多路查找树,节点最大的孩子数目称为B树的阶。属性1、如果根节点不是叶节点,则起至少有两棵子树。2、每一个非根的分支节点都有k-1个...原创 2020-02-01 11:18:05 · 491 阅读 · 0 评论 -
【我是一棵树】二叉排序树、平衡二叉树(AVL)
二叉排序树又称为二叉查找树。它或者是一棵空树,或者是具有下列性质的二叉树:若他的左子树不空,则左子树上所有节点的值均小于它根节点的值 若他的右子树不空,则右子树上所有节点的值均大于根节点的值 它的左、右子树也分别为二叉排序树二叉排序树特点是以链接的方式存储,保持了链接存储结构在执行插入或删除操作室,不用一栋元素的优点,只要找到合适的插入和删除位置后,仅需修改链接指针即可。插入、删...原创 2020-01-22 06:53:00 · 1010 阅读 · 0 评论 -
【我是一棵树】二叉树详解(二)
二叉树的存储结构顺序存储:就是用一组数组来存储二叉树中节点,并且节点的存储位置,也就是数组的下标要能体现节点之间的逻辑关系。考虑一种极端情况,一棵深度为k的右斜数,它只有k个节点,却需要分配2^k-1个存储单元,这显然是对空间的浪费,所以顺序的存储结构只适用于完全二叉树。二叉链表:既然顺序存储结构实用性不强,我们就要考虑练市存储结构。二叉树每个节点最多有两个孩子,所以它设计一个数据域和...原创 2020-01-21 23:47:31 · 841 阅读 · 0 评论 -
【我是一棵树】二叉树详解(一)
二叉树定义二叉树是n(n>=0)个节点的有限集合。该集合或者未空集(称为空二叉树),或者有一个根节点和两棵互不相交的,分别称为根节点的左子树和右子树的二叉树组成。二叉树特点每个节点最多有两棵子树,所以二叉树中不存在度大于2的节点。 左、右子树是有顺序的,次序不能颠倒。 即使书中某节点只有一棵子树,也要区分它是左子树还是右子树。完全二叉树对一棵具有n个节点的二叉树按程序编...原创 2020-01-20 22:35:34 · 1131 阅读 · 0 评论 -
【我是一棵树】树的概念
树的定义树是n(n>=0)个节点的有限集。n=0时称为空树,在任意一颗非空树中,有以下特性1、有且仅有一个特定的称为跟的节点2、当n>1时,其余节点可分为m(m>=0)个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树这个定义是一种比较新的定义方法,这里面用到了递归。树的节点包含一个数据元素及若干指向其子树的分支。节点拥有的子树称为节点的...原创 2020-01-20 07:24:08 · 1492 阅读 · 0 评论 -
关于哈希(散列)算法的8个问题
散列表(hash)是什么?散列技术实在记录的存储位置和它的关键字之间建立一个确定的对应关系f,是的每个关键字key对应一个存储位置f(key)。我们把这种对应关系f称为散列函数,又称为哈希函数。按这个思路,采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或者哈希表。那么关键字对应的记录存储位置我们称为散列地址。散列技术最适合的求解问题是查找与给定值相等的记录。对...原创 2020-01-16 20:53:41 · 2714 阅读 · 0 评论 -
【排序知多少】堆排序详解
堆排序的概述堆是具有下列特性的完全二叉树:每个节点的值都大于或等于其左右孩子的节点的值,成为大顶堆,或者每个节点的值都小于或等于其左右孩子节点的值,成为小顶堆。在选择到最小记录同时,并根据比较结果对其他记录做出相应调整。这样的排序整体效率非常高。堆排序的思路堆排序(Heap Sort)就是利用堆进行排序的方法。他的基本思想是,将待排序的序列构造成一个大顶堆,此时,整个序列的最大值就...原创 2020-01-12 17:30:34 · 1776 阅读 · 0 评论 -
【排序知多少】冒泡排序详解
冒泡排序思路1、对元素进行两次遍历2、第一次遍历所有元素3、第二次判断当前元素是否比之后的元素大,如果大则交换位置,否则不动冒泡排序理解冒泡排序是一种常用的排序算法。从思路理解上比插入排序、快排、归并排序都要简单。就是做两次嵌套循环,一旦发现前面的数比后面的数大,就交换位置。像气泡从水里升上来一样,越往上气泡越大。冒泡排序复杂度冒泡排序是对元素做两次嵌套的循环,显而易见...原创 2020-01-09 23:59:06 · 1384 阅读 · 0 评论 -
【排序知多少】归并排序(递归和非递归实现)
归并排序思路1、将待排序元素一分为二2、对于左半边和右半边元素分别再次进行拆分,直到无法再拆3、把拆分过的元素进行重新排序并且合并4、合并之后最终的数组即为排序之后的数组归并排序理解归并排序适用了完全二叉树排序的想法,将带排列数组逐层均分,尽可能分成完全二叉树的形式,再把每组查分的元素从最底层开始,逐层向上的合并起来,直到再次和成一个有序的数组,即完成整个排序过程。归并...原创 2020-01-08 23:02:08 · 1331 阅读 · 0 评论 -
【排序知多少】插入排序详解
插入排序思路1、从待排序元素中的第二个元素开始进行遍历2、记录当前元素作为临时变量3、判断当前元素前的元素是否小于当前元素,小于则不处理,否则把当前元素和前一元素进行互换4、进行遍历,直到当前元素前的所有元素都已经排好序为止插入排序理解插入排序就是从数组的开始两个数进行排序,排好之后再对第三个数进行排序,直到对所有的元素全部进行排序之后,完成排序的逻辑。每次排序的过程,就是要...原创 2020-01-07 23:59:49 · 1293 阅读 · 0 评论 -
【排序知多少】快速排序详解
快速排序思路1、选取基准值,并标明首、尾的标识low、high;2、先从后往前判断,当high的值大于基准值时,high--,否则将low的值替换为high的值;3、然后从前往后判断,当low的值小于基准值时,low++,否则将high的值替换为low的值;4、将基准值赋值给low的值;5、当low<high的时候,递归调用2~4步;快速排序理解每个人理解不同,有...原创 2020-01-06 07:06:15 · 1587 阅读 · 0 评论