随笔分类 - 数据结构/算法
摘要:零、参考资料 Vue3 Diff算法之最长递增子序列,学不会来砍我! 多图讲解Vue3的diff算法最长递增子序列实现原理 一、大体思路 规律(思路)是:(注:结果集中存储的是都是下标,不是原数组的数据) 1. 遍历原数组,比对当前值与结果集最后一位 2. 如果当前值大,则推入结果集(注意,是推入,
阅读全文
摘要:1.JavaScript 数据结构与算法之美
阅读全文
摘要:原文: 十大经典排序算法(动图演示) 快速排序 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 算法描述 快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。
阅读全文
摘要:原文: 十大经典排序算法(动图演示) 归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-
阅读全文
摘要:原文: 十大经典排序算法(动图演示) 插入排序 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法描述: 一般来说,插入排序都采用 in-place 在数组上实现: 从第一
阅读全文
摘要:原文: 十大经典排序算法(动图演示) 希尔排序 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 算法描述: 将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述
阅读全文
摘要:原文: 十大经典排序算法(动图演示) 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由
阅读全文
摘要:原文: 十大经典排序算法(动图演示) 选择排序(Selection Sort) 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
阅读全文
摘要:原文: 在 Javascript 中学习数据结构与算法。 概念: HashTable 类, 也叫 HashMap 类,是 Dictionary 类的一种散列表实现方式。 散列算法的作用是尽可能快地在数据结构中定位到某个值,如之前的一些数据结构中(说的就是 LinkedList),需要遍历数据结构才能
阅读全文
摘要:原文: 在 Javascript 中学习数据结构与算法。 概念: 集合、字典、散列表都可以存储不重复的数据。字典和我们上面实现的集合很像。 当然,字典中的数据具有不重复的特性。js 中 Object 的键值对 key: value 的形式就是字典的实现,所以字典通常也称为映射。 实现一个简单的字典类
阅读全文
摘要:原文: 在 Javascript 中学习数据结构与算法。 概念: 即数学中的集合,在计算机科学中被应用成数据结构。 当然,集合中的数据具有不重复的特性。js 集合的原理大致上是 Object 的键值对 key: value 的形式,细微的不同是集合应用的是 value: value 的形式(即 ke
阅读全文
摘要:原文: 在 Javascript 中学习数据结构与算法。 概念: 链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每个 元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。下图展示了链表的结构: 相对于传统的数组,链表的一个好处在于,添加或移除元
阅读全文
摘要:原文: 在 Javascript 中学习数据结构与算法。 概念: 与栈相反,队列是一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项;队列在尾部添加新元素,并从头部移除元素。最新添加的元素必须排在队列的末尾。在现实中,最常见的例子就是排队,吃饭排队、银行业务
阅读全文
摘要:原文: 在 Javascript 中学习数据结构与算法。 概念: 栈是一种遵从先进后出 (LIFO) 原则的有序集合;新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端为栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。 原理很简单,在数组的基础上限制了行为。 下面是 js 来实现的一个栈:
阅读全文
摘要:用 js 实现的二叉树数据结构,完成 先/中/后 序遍历、查找最 大/小 值、查找特定值以及删除节点(虽然没太理解)的操作。 另一个实例:
阅读全文