本文主要介绍了哈希、队列、栈(stack)、链表、数(tree)
哈希(Hash)
满足键值对(‘key’:’value’)的就是哈希。
数组就是哈希
- 计数排序中的桶(复杂度 O(n+max),比快排还快12345678910111213141516171819202122计数排序:数组[第0个是4,第1个是1,第二个是8......]将数组['0':4,'1':1,'2':8,'3':2,'4':9,'5':8,'length':6 //length等于最大下标index+1]里的值放入桶内hash=[]hash['1':1 //1有1个'2':1'4':1'8':2 //8有2个'9':1] //hash的length=10,因为最大下标index是9然后再从桶里把数值取出来newArr=[]newArr[1,2,4,8,8,9]
|
|
(桶排序)[http://bubkoo.com/2014/01/15/sort-algorithm/bucket-sort/] 与计数排序的区别
123456789桶排序hash['1':[5,2,8] //第1个桶表示10以内的数有5,2,8,然后将这个桶内的数字二次排序'2':[]'3':[27]'4':[33,37,31] //40以内的数有33,37,31,将这几个数字二次排序]与计数排序的区别:假设数组中最大的数是1000,那么计数排序需要1000个桶,而桶排序(如果每个桶的区间是100一分割),那么只需要10个桶,但是桶内的数们需要二次排序(基数排序)[http://bubkoo.com/2014/01/15/sort-algorithm/radix-sort/] 与计数排序的区别
1基数排序始终只有10个桶,按照个位、十位、百位、千位.....的数值进行比较,每个桶里的数们组成队列,先进先出
队列(Queue)
- 先进先出
- 可以用数组实现
- 举例:排队1var out = arr.shift()
栈(Stack)
- 先进后出
- 可以用数组实现
- 举例:坐电梯1var out = arr.pop()
链表(Linked List)
- 数组无法直接删除中间的一项,链表可以
用哈希(JS里面用对象表示哈希)实现链表(一个哈希指向另一个哈希)
123456789101112131415161718192021[0,2,1]var a = {value:0,next:{value:2,next:{value:1,next:undefined}}}a.value //0a.next.value //2a.next.next.value //1删除中间的2:a.next = a.next.next //将a.next指向a.next.nexta.value //仍旧是0a.next.value //变成了1a.next.next.value //undefinedhead、node 概念
12head:链表的表头node:节点,表头属于第一个节点
树(tree)
https://segmentfault.com/a/1190000000740261
- 举例:有层级结构的需要用到tree,比如DOM树
- 概念:层数(第0层、第1层、第2层…)、深度(总共有几层)、节点个数(没有下一个节点的叫做叶子节点)
- 二叉树
- 满二叉树
- 完全二叉树
完全二叉树和满二叉树可以用数组实现
123456789arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,15,15]如何取第3层的第1个数字?arr[Math.pow(2,3-1)-1] //4 【2的3减1次方后减1】如何取第3层的第2个数字?arr[Math.pow(2,3-1)-1+1]如何取第3层的第3个数字?arr[Math.pow(2,3-1)-1+2]其他树可以用哈希(对象)实现
- 操作:增删改查
- 堆排序用到了 tree
1.将数组里的数表示成完全二叉树
2.然后进行最大堆调整【每个父节点的数值都大于等于其两个孩子结点的数值】:从最后一层的最右边开始到最左边,然后上一层的最右边到最左边,每发生一次交换时,踢下来的数都需要与子节点再次比较
3.最终,最上面的那个数就是最大的数,把他与最后一个数交换(即放到数组的最后一位),且这个最大数不再参与排序
4.由于顶上的数发生了交换,所以继续进行顶上的数与两个子节点比较(也就是说,一开始是从右往左,从下往上比较;当第一次最大堆调整完后,将顶点的数与最后一个数进行交换;接下来就是从上到下进行比较了)
|
|
- 其他:B树、红黑树、AVL树
堆排序可视化
https://www.cs.usfca.edu/~galles/visualization/HeapSort.html
堆排序JS代码
完整讲解(看到最后):http://bubkoo.com/2014/01/14/sort-algorithm/heap-sort/