按照是否通过比较分类:
非线性时间比较类排序:通过比较
来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。
线性时间非比较类排序:不通过比较
来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。
- 非线性时间比较类排序
- 交换排序
- 冒泡排序
- 快速排序
- 插入排序
- 简单插入排序
- 希尔排序
- 选择排序
- 简单选择排序
- 堆排序
- 归并排序
- 交换排序
- 线性时间非比较类排序
- 基数排序
- 桶排序
按照是否使用硬盘分类:
内部排序算法:即排序的整个过程只是在内存中完成
外部排序算法:当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器(例如硬盘、U盘、光盘)。
外部排序算法由两个阶段构成:
- 按照内存大小,将大文件分成若干长度为 L 的子文件(L 应小于内存的可使用容量),然后将各个子文件依次读入内存,使用适当的内部排序算法对其进行排序(排好序的子文件统称为“归并段”或者“顺段”),将排好序的归并段重新写入外存,为下一个子文件排序腾出内存空间;
- 对得到的顺段进行合并,直至得到整个有序的文件为止。
对得到的顺段进行合并的方法主要有:
- 二路归并
- 多路归并
查找算法分类:
- 静态查找和动态查找
- 静态查找
- 动态表指查找表中有删除和插入操作的表
- 无序查找和有序查找
- 无序查找:被查找数列有序无序均可
- 有序查找:被查找数列必须为有序数列
1、顺序查找
基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。
说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表。
2、二分查找
基本思想:也称为是折半查找,属于有序查找算法。用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点
说明:元素必须是有序的,如果是无序的则要先进行排序操作。
3、插值查找
基本思想:基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。
4、斐波那契查找
基本思想:也是二分查找的一种提升算法,通过运用黄金比例(0.618)的概念在数列中选择查找点进行查找,提高查找效率。
5、树表查找
- 二叉树查找树(二叉树查找树和二叉树不一样)
- 平衡查找树
- 2-3查找树
- 红黑树
- B树和B+树(B Tree/B+ Tree)
6、分块查找
基本思想:将n个数据元素"按块有序"划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须"按块有序";即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,……
7、哈希查找
- 深度优先遍历
- 核心:循环 + 递归
- 广度优先遍历
- 核心:队列的出对、入队
- 先序遍历
- 中序遍历
- 后序遍历
- 二叉树
- 二叉搜索树(二叉查找树)
- 红黑树
- 2-3查找树
- B树和B+树(B Tree/B+ Tree)