Skip to content

Latest commit

 

History

History
104 lines (71 loc) · 3.95 KB

README.md

File metadata and controls

104 lines (71 loc) · 3.95 KB

算法

排序算法

按照是否通过比较分类:

非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。

线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。

  • 非线性时间比较类排序
    • 交换排序
      • 冒泡排序
      • 快速排序
    • 插入排序
      • 简单插入排序
      • 希尔排序
    • 选择排序
      • 简单选择排序
      • 堆排序
    • 归并排序
  • 线性时间非比较类排序
    • 基数排序
    • 桶排序

按照是否使用硬盘分类:

内部排序算法:即排序的整个过程只是在内存中完成

外部排序算法:当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器(例如硬盘、U盘、光盘)。

外部排序算法由两个阶段构成:

  1. 按照内存大小,将大文件分成若干长度为 L 的子文件(L 应小于内存的可使用容量),然后将各个子文件依次读入内存,使用适当的内部排序算法对其进行排序(排好序的子文件统称为“归并段”或者“顺段”),将排好序的归并段重新写入外存,为下一个子文件排序腾出内存空间;
  2. 对得到的顺段进行合并,直至得到整个有序的文件为止。

对得到的顺段进行合并的方法主要有:

  • 二路归并
  • 多路归并

常见排序算法说明

查找算法

查找算法分类:

  • 静态查找和动态查找
    • 静态查找
    • 动态表指查找表中有删除和插入操作的表
  • 无序查找和有序查找
    • 无序查找:被查找数列有序无序均可
    • 有序查找:被查找数列必须为有序数列

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)

相关树结构说明