1.AVL树和红黑树
AVL树又称平衡二叉树查找,增加和删除节点通过树形旋转达到平衡
红黑树通过重新着色和左右旋转,更加高效完成增加和删除后的平衡
两者区别:相同节点的情况下,红黑树的高度可能更高,平均查找次数高于相同情况下的AVL树;插入时,两者都至多旋转两次;删除时,红黑树,至多旋转三次;
2.B树和B+树
每个节点同时存储key和data,B+树只有叶子节点才存储data,非叶子节点只存储key
区别:B+树非叶子节点不存储数据,内存页存放更多的key,数据存放的更加紧密,更好利用空间,叶子节点关联的数据具有更好的缓存命中率;B+树叶子节点是相连的,整棵树的遍历,只需一次线性遍历叶子节点即可;B树需要每一层的递归遍历, 相邻可能在内存中不相邻, 缓存命中性没有B+树好;B树每个节点包含key和value,访问离根节点更近,访问更迅速;
3.排序
内部:在内存中进行的
比较:
插入:
直接插入:将一个待排序的字段按其关键字的大小插入到已排序的一组记录上,适用数据量小
希尔排序:把记录按下标的一定增量分组,对每组进行直接插入排序,每次排序后增量减一 适用数据中等
选择:
直接选择:每次在排序队列中找到最小的元素,和未排序序列第一个元素交换位置,再在剩余未排序序列中重复该操作
堆排序:建立大根堆和小根堆,大根堆每个节点的值都不小于它的子节点值,小根堆每个节点的值不大于它的子节点值;大根堆,建立堆时最后一个节点作为当前节点,如存在父节点并且大于,就交换位置 数据大
交换:
冒泡:比较相邻的元素,第一个比第二个大就进行交换,对每一对相邻元素做同样的工作
快速:选择一个基准元素,一部分小于基准,一部分大于基准;按照此方法进行递归
归并:
分成两部分,递归排序,最后进行合并
非比较:计数,基数,桶
外部:大量数据无法在内存中进行