随笔分类 - 数据结构与算法
数据结构——二叉搜索树
摘要:在这里总结一下二叉搜索树常用的方法。 准备工作:仿照链表的实现,在二叉搜索树类中也需要一个内部节点类。该节点类包含三个属性:存储节点值的key、指向左子树的left、指向右子树的right。此外,在二叉搜索树中添加一个root属性,指向根节点。 function Node(key) { this.k
阅读全文
数据结构——单向链表
摘要:本文总结一下链表常用方法的实现。 准备工作:由于链表由一个个节点组成,且节点在内存中的存储不连续,所以我们需要封装一个内部的Node类,包含两个属性:节点值data和下一个节点的引用地址next。此外在链表类中还需要两个属性:head用来指向第一个节点,length表示当前链表的长度。 // 内部的
阅读全文
算法——快速排序
摘要:快速排序 快速排序的思路是,先选择任意元素为轴,将比轴小的元素都放在其左边,比轴大的元素都放在其右边,这样轴的位置一定是正确的。之后通过递归,对轴左右两边的元素都进行快速排序。最终实现整个数组有序。 那么第一个问题来了,怎么选择轴呢?这里b站的coderwhy老师给出一种方案:让数组首尾中三处元素当
阅读全文
算法——希尔排序
摘要:希尔排序 我们还记得,插入排序的思路是: 1、外循环依次拿出第二个到最后一个元素,记作temp。 for (let i = 1; i < length; i++) { let temp = this.array[i] 2、将temp与它前面的元素依次进行比较。定义一个指针j指向前面的元素 let j
阅读全文
算法——三种简单排序:冒泡、选择、插入
摘要:冒泡排序 冒泡排序是一种很基本的排序算法,步骤如下。 (1) 指向数组中两个相邻的元素(最开始是数组的头两个元素),比较它们的大小。 (2) 如果它们的顺序错了(即左边的值大于右边),就互换位置。如果顺序已经是正确的,那这一步就什么都不用做。 (3) 将两个指针右移一格。重复第(1)步和第(2)步,
阅读全文
浙公网安备 33010602011771号