排序
冒泡排序
两两比较相邻元素,反序则交换位置,直至没有反序
简单选择排序
通过n-i次的元素比较,找出n-i+1记录中最大元素,并与位置i的记录交换位置
直接插入排序
将一个元素插入到有序表中,得到一个记录数加1的有序表
希尔排序
将相距一个gap的子序列直接插入排序,逐渐缩小gap再进行直接插入排序
堆排序
堆是完全二叉树的一种,分为大顶堆和小顶堆
简单选择排序的优化
先建立一个大顶堆,将根节点与最后一个节点交换,取出最大元素,再建立大顶堆并交换,循环此过程
二路归并排序
先把n个元素当作n个序列,两两排序,再把排序好的两两排序...
快速排序
选择一个比较元素,将比该元素大的元素放到右边,小的元素放到左边,分别对左右便进行快速排序
查找
根据给定值,在查找表中确定一个等于给定值的记录
顺序查找
即线性查找,表是无序的,从表的第一个元素开始,逐个与给定值比较;可以通过使用哨兵优化该查找,无需查找时判断是否越界,在表的末端添加一个元素等于要查找的值,查找到最后时总会相等,不会越界。
有序表查找
表本身是有序的
二分查找,即折半查找,在有序表中,取中间记录作为比较对象,若给定值大于中间记录,则在中间记录的右半区继续二分查找,小于中间记录,则在左半区二分查找,相等则直接返回
线性索引查找
索引就是把一个关键字与关键字对应的记录关联的过程
索引表,即线性索引,就是把索引项集合组织为线性结构
稠密索引,在索引表中,数据集的每个记录对应一个索引项,索引项一定是按照关键字有序排列
分块索引,将数据集的记录分成若干块,块内无序,块间有序
分块索引的查找,块间有序,通过二分查找找到对应的块,块内无序,在块内使用顺序查找
倒排索引,结构包含次关键码和记录号表,记录号表存储具有相同次关键码的所有记录号,最常见的就是WordCount
二叉树
二叉排序树,即二叉查找树,它或者是空树,或者满足以下三个条件
1. 左子树为空,或者左子树所有节点的值小于根节点
2. 右子树为空,或者右子树所有节点的值大于根节点
3. 左右子树也是二叉排序树
平衡二叉树,即AVL树,是一种二叉排序树,每一个节点的左子树和右子树的高度差最多等于1
平衡因子为左子树深度减去右子树深度BF Balance Factor
最小不平衡子树,距离插入节点最近的,且平衡因子绝对值大于1的的节点为根的子树
散列表
散列技术在记录的存储位置和关键字之间确立一个对应的关系f,使得每个关键字key对应一个存储位置f(key)
对应关系f成为散列函数
使用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表
冲突,key1,key2不同,但f(key1) == f(key2),则称为冲突,key1,key2称为散列函数的同义词
直接定址法: f(key) = a * key + b
除留余数法:f(key) = key mod p
Reference:https://blog.csdn.net/morewindows/article/details/7961256