![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 67
数据结构与算法
花铛
这个作者很懒,什么都没留下…
展开
-
【算法五】排序算法之插入排序
插入排序(Insertion Sort):是一种简单的排序算法,也是一种稳定的排序算法。其实现原理是:从待排序序列中取出一个值,将其与已排序序列中的值进行比较后插入到合适的位置;重复此步骤,直到待排序序列中不再有值。假设待排序序列为 5、1、4、2、8,如果采用选择排序对其进行升序排序,则整个排序过程如下所示:从第 1 个位置取出 1;和 5 进行比较,1 小于 5,5 向后位移一位;已经到达了已排序序列的最左边,0 插入到第 1 个位置。从第 2 个位置取出 4; 和 5 进行比较,4 小于 5,5原创 2022-06-30 09:25:26 · 671 阅读 · 0 评论 -
【算法四】排序算法之选择排序
选择排序(Selection Sort):是一种简单的排序算法,也是一种不稳定的排序算法。其实现原理是:在待排序序列中不断进行比较,一轮遍历选出一个最值,将其按顺序存放在已排序序列中;重复此步骤,直到待排序序列中的数据都排序完毕。假设待排序序列为 5、3、6、1、0,如果采用选择排序对其进行升序排序,则整个排序过程如下所示:选择排序改进了冒泡排序,将交换的次数由 减少到 ,但是比较的次数仍然是 。通常认为选择排序在执行效率上是高于冒泡排序的。上面的例子一共有 5 个数字,第一轮遍历进行了 4 次比较,原创 2022-06-29 14:43:39 · 1072 阅读 · 0 评论 -
【算法三】排序算法之冒泡排序
冒泡排序(Bubble Sort):是一种简单的排序算法,也是一种稳定的排序算法。其实现原理是:依次比较两个相邻的元素,当该对元素顺序不正确时就进行交换,从左到右一轮遍历得到一个最值;重复此步骤,直到没有任何两个相邻的元素可以交换,就表明完成了排序。假设待排序序列为 5、1、4、2、8,如果采用冒泡排序对其进行升序排序,则整个排序过程如下所示:第一轮遍历:此时整个序列中的元素都位于待排序序列,依次比较每对相邻的元素,并对顺序不正确的元素进行位置交换。比较 4 次,从待排序序列中找到此次的最值 8,并将其放到原创 2022-06-28 09:41:46 · 5552 阅读 · 0 评论 -
【算法二】排序算法
将数据存储在某个数据结构中后,经常需要根据需求对数据进行不同方式的排序。比如:对姓名按字母排序,对学生按成绩排序,对商品按价格排序等。排序算法有很多:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、计数排序、基数排序、堆排序、桶排序等。首先封装一个列表类和一些常规操作的函数,以便辅助完成排序算法的实现。......原创 2022-06-22 11:05:13 · 201 阅读 · 0 评论 -
【算法一】大 O 表示法
算法:是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令。算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。简单来说,算法就是把一个问题,拆解为计算机能够一步一步执行的步骤。大 O 表示法:是算法的一种特殊的表示法。它可以告诉我们算法的快慢,比较的是操作数,指出了当数据量增多时算法运行时间的增速,增速越慢,代表算法越快。在数据量发生变化时,算法的效率通常也会跟着发生变化。大 O 表示法的结果只是一个概数。原创 2022-06-21 10:24:41 · 1195 阅读 · 0 评论 -
【数据结构十一】图
图是由顶点的集合和边的集合组成的,通常用 V(Vertex)表示顶点的集合,用 E(Edge)表示边的集合。边是顶点与顶点之间的连线。可以是有向的,也可以是无向的,例如: 是无向的,也就是既能从 A 到 B,也能从 B 到 A; 是有向的,也就是只能从 A 到 B,不能从 B 到 A。如果边是有向的,则可以称这个图是有向图;如果边是无向的,则可以称这个图是无向图。........................原创 2022-06-13 17:25:17 · 701 阅读 · 0 评论 -
【数据结构十】平衡的二叉搜索树之 AVL 树、红黑树
因为二叉搜索树有它的缺陷,当它不平衡时会影响二叉搜索树查找、插入和删除的效率。为了不影响操作效率,需要保证二叉搜索树是平衡的,人们提出了很多解决方案,形成了很多新的树,这些新的树依然是二叉搜索树,只不过是在二叉搜索树的基础上,在插入和删除元素的时候能保持平衡性。常见的平衡的二叉搜索树有:AVL 树和红黑树。AVL 树:是最先发明的平衡的二叉搜索树,简称平衡二叉树。一棵 AVL 树必须具备以下两个条件:它必须是二叉搜索树;每个节点的左子树和右子树的高度差至多为 1。因为 AVL 树是平衡的,所以时间复杂度也是原创 2022-06-02 10:10:35 · 699 阅读 · 0 评论 -
【数据结构九】二叉树
二叉树:如果树中的每个节点最多只有两个子节点,这样的树就称为二叉树。所有的树本质上都可以使用二叉树模拟出来。上面的例子并不是二叉树,将它用儿子-兄弟表示法表示,并旋转 45 度,就可以看到模拟成了一颗二叉树。二叉树的特性:一个二叉树的第 i 层的最多有 2^(i - 1),i >= 1 个节点。第 1层最多有 1 个节点,第 2 层最多有 2 个节点,第 3 层最多有 4 个节点…一个深度为 k 的二叉树最多有 2 ^ k - 1,k >= 1 个节点。第 1层最多有 1 个原创 2022-05-27 14:42:17 · 728 阅读 · 0 评论 -
【数据结构八】树
数组的优点:根据下标值访问效率会很高。数组的缺点。在插入和删除数据时,需要进行大量的位移操作,效率很低;根据元素来查找,需要进行线性查找,效率就会比较低,比较好的方式是先对数组进行排序,生成有序数组,再进行二分查找,才能提高查找效率。链表的优点:插入和删除操作效率都很高。链表的缺点:查找效率很低,需要从头部或者尾部开始依次访问链表中的每个数据项,直到找到;即使插入和删除操作效率很高,但是如果要插入和删除中间位置的元素的话,还是需要从头或尾先找到对应的数据。哈希表的优点:插入、查询和删除效率.原创 2022-05-20 17:57:59 · 1527 阅读 · 0 评论 -
【数据结构七】哈希表
哈希表是一种非常重要的数据结构。几乎所有的编程语言都有直接或间接地应用这种数据结构。哈希表通常是基于数组进行实现的,随机查找非常快速。相对于数组,它的优点是可以提供非常快速地插入、删除和查找操作;缺点是哈希表中的数据是没有顺序的,并且 key 不允许重复。数组进行插入操作,效率不高。数组进行查找操作:如果是基于索引进行查找,效率非常高;如果是基于内容进行查找,效率不高。数组进行删除操作,效率不高。案例:例如:现在有5000个单词,需要将这些单词使用某种数据结构保存起来,查找到单词之后可以获原创 2022-05-13 08:51:16 · 416 阅读 · 0 评论 -
【数据结构六】字典
字典中存储的是键值对,一一对应,一个 key 对应一个 value。字典中的 key 是无序的,且不允许重复;value 允许重复。数组和集合存储的都是一个个的元素。数组是有序的,且允许重复;集合是无序的,且不允许重复。在 JS 中默认提供了数组 Array;在 ES6 中增加了集合 Set 和字典 Map。生活中的字典:新华字典:可以根据拼音去查找汉字。字典和对象:很多编程语言中(比如 Java)对字典和对象的区分比较明显:对象通常是一种在编译阶段就确定下来的结构,不可以动态的添加或原创 2022-05-07 09:10:53 · 1050 阅读 · 0 评论 -
【数据结构五】集合
几乎每种编程语言中,都有集合结构。集合通常是由一组无序的、不能重复的元素构成。集合可以看成是一种特殊的数组,特殊之处在于里面的元素没有顺序,也不能重复,没有顺序意味着不能通过下标值访问,不能重复意味着相同的相同的对象在集合中只会存在一份。集合比较常见的实现方式是哈希表。2011年6月发布的 ES5 中已经包含了 Array 类。2015年6月发布的 ES6 中包含了 Set 类。所以其实可以不封装,直接使用。集合的实现:// 封装集合function Set() { // 使用一个对象来原创 2022-05-06 10:14:34 · 431 阅读 · 0 评论 -
【数据结构四】链表
要存储多个元素,数组可能是最常用的数据结构。数组结构的优点是通过下标值存取元素效率非常高。数组结构的缺点:数组的创建通常需要申请一段连续的内存空间(一整块的内存)。数组的大小是固定的,如果当前数组不能满足容量需求,那么久需要进行扩容(虽然 JS 中数组的大小不是固定的,但是大多数编程语言都是固定的)。扩容:一般情况是申请一个更大的数组,然后将当前数组中的元素复制过去。在一个数组中进行插入和删除元素的成本很高,需要进行大量元素的位移。(比如:一个数组中有 10000 个元素,想要在第 100 .原创 2022-04-21 13:52:25 · 325 阅读 · 0 评论 -
【数据结构三】队列
队列结构:Queue,也是一种常见的数据结构。它是一种受限的线性结构,在队尾插入元素,在队首删除元素,先进先出(FIFO,first in first out)。生活中的队列的案例:比如:在银行排队办理业务,后到的人只能排在队伍的末端,开始营业时队伍前端的人先办理业务。程序中的队列的案例:比如:JS 是单线程的,在执行代码时会有多个任务,这些任务会在线程中排队按顺序依次执行。队列的实现:本章基于数组来实现队列结构。// 封装队列function Queue() { // 队列中的元素 t原创 2022-03-30 16:01:25 · 3753 阅读 · 0 评论 -
【数据结构二】栈
数组是一种线性结构,并且可以在任意位置插入和删除数据。但是有时候,为了实现某些功能,必须对这种任意性加以限制。栈和队列就是比较常见的受限的线性结构。栈:Stack,也是一种常见的数据结构。它是一种受限的线性表,添加和删除元素只能在栈顶操作,后进先出(LIFO,last in first out)。进栈:向一个栈插入新元素称作进栈(入栈、压栈),它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。出栈:从一个栈删除元素称作出栈(退栈),它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。生活.原创 2022-03-30 10:56:52 · 2400 阅读 · 0 评论 -
【数据结构一】数组
数据结构与算法:数据结构就是在计算机中存储和组织数据的方式。常见的数据结构很多,比如有数组、栈、队列、链表、散列表、树、图、堆等等。每一种都有其对应的应用场景,不同的数据结构的不同操作性能是不同的,在开发中要根据具体的需求来选择。算法可以理解为解决问题的步骤逻辑。不同算法的效率是不同的。生活中的数据结构与算法:程序是对现实生活的抽象。生活中的数据结构和算法,比如有:图书馆图书的摆放,为了更加方便的放置新的书籍和在需要的时候能购找到书籍,需要合理的组织数据,并且通过高效的算法插入和查询数据。数组:原创 2022-03-29 16:52:11 · 151 阅读 · 0 评论 -
【数据结构】图
在计算机程序设计中,图结构也是一种非常常见的数据结构。研究图结构的主要目的就是为了研究事物之间的关系(顶点代表事物,边代表两个事物之间的关系)。图的现实案例:程序就是现实的一种模拟、一种抽象。图可以用来模拟很多现实的数据结构。比如:人与人之间的关系网:每个人都是一个顶点,人与人之间的关系就形成一条边。地铁图:每个站点都是一个顶点,站点与站点之间的线路就形成一条边。图的简介:图由顶点和边构成。通常用 V(Vertex)表示顶点,用 E(Edge)表示边。顶点:顶点就是图中的一个节点。原创 2022-03-29 10:59:35 · 1594 阅读 · 0 评论