【js数据结构与算法(下)】-学习笔记

学习笔记:

观看bilibili的js数据结构与算法的一些笔记,视频链接:https://www.bilibili.com/video/BV1N4411X7FW

1.树结构的表示:

普通表示法:

儿子-兄弟表示法:

儿子-兄弟表示的树旋转45°后:

2.二叉树:每个节点最多只能有两个子节点,所有树都可以用二叉树表示

二叉树存储常见的方式:数组、链表(最常用链表存储,数组一般用来存完全二叉树)

3.二叉搜索树:查找效率高,最容易获取最值(最小:最左叶子节点,最大:最右叶子节点),插入数据的原理:newNode和当前node比较,如果newNode>node就插在右边,如果newNode<node就插在左边

二叉树:插入、遍历、搜索、删除

二叉搜索树的遍历:先序遍历、中序遍历、后序遍历

先序遍历:根节点=》所有左节点=》所有右节点

中序遍历:最左=》根节点=》最右

后序遍历:左=》右=》根节点

二叉搜索树的最值:找到最后一个左(最小值)叶子节点/右(最大值)叶子节点

二叉树的删除:删除叶子节点(没有子节点了)、删除的节点有1个子节点、删除的节点有2个子节点(若把左边的拉上去,选择左边最大/若把右边拉上去,选择右边最大)

4.平衡、非平衡二叉树

5.红黑树规则:1.根节点是黑色,叶子节点都是黑色且是空节点(NIL节点),2.节点若为红色,则它的子节点必须是黑色,不能有连续的两个红色,3.路径,4.保持平衡

 

红黑树的变化规则:变色、旋转

6.图论

7.大O表示法:算法的速度随着数据量的变化而变化(注意x轴有两条,最下面是1,上面是logn)

8.排序算法必须掌握的5个:冒泡排序、选择排序、插入排序、希尔排序、快速排序(每次console.log(i)和(j)去帮助理解)

(1)冒泡排序:会有越界问题,外层递减内层递加,

(2)选择排序:没有越界问题,每次选出最小值出来交换

 

(3)插入排序:核心是局部有序,要注意j>0条件,比较、交换次数效率都高于冒泡、选择排序

 (4)希尔排序:基于插入排序,间隔由大变小,根据间隔先排序,希尔排序的效率与增量有关

 插入排序相当于gap=1的希尔排序,所以代码逻辑和插入排序是一样的,只是要把1改成gap

(5)快速排序:取头、中、尾的中位数作为枢纽pivot,i指针向左遍历,j指针向右遍历,遍历的数据小于pivot的放左边,大于pivot的放右边

ps:根据视频里的代码来的话,(可直接看这个https://www.cnblogs.com/yaya-003/p/12660051.html),逻辑似乎有错,因为结果有时对有时错

 上述5种常见排序的效率:

 

else:

1.实现二分查找法

2.闭包

3.null.key

4.写出5种排序:冒泡、选择、插入、希尔、快速

5.写个间隔取出数组元素的方法

 

posted @ 2020-07-30 16:53  赤色大地  阅读(90)  评论(0)    收藏  举报