《数据结构》经典算法总结

25 阅读3分钟

《数据结构》经典算法总结

排序算法

比较排序

  1. 冒泡排序(Bubble Sort)

    • 时间复杂度:O(n²)最坏/平均,O(n)最佳
    • 空间复杂度:O(1)
    • 稳定排序
  2. 选择排序(Selection Sort)

    • 时间复杂度:O(n²)
    • 空间复杂度:O(1)
    • 不稳定排序
  3. 插入排序(Insertion Sort)

    • 时间复杂度:O(n²)最坏/平均,O(n)最佳
    • 空间复杂度:O(1)
    • 稳定排序
  4. 希尔排序(Shell Sort)

    • 时间复杂度:O(n log n)到O(n²)
    • 空间复杂度:O(1)
    • 不稳定排序
  5. 归并排序(Merge Sort)

    • 时间复杂度:O(n log n)
    • 空间复杂度:O(n)
    • 稳定排序
  6. 快速排序(Quick Sort)

    • 时间复杂度:O(n log n)平均,O(n²)最坏
    • 空间复杂度:O(log n)
    • 不稳定排序
  7. 堆排序(Heap Sort)

    • 时间复杂度:O(n log n)
    • 空间复杂度:O(1)
    • 不稳定排序

非比较排序

  1. 计数排序(Counting Sort)

    • 时间复杂度:O(n+k)
    • 空间复杂度:O(n+k)
    • 稳定排序
  2. 桶排序(Bucket Sort)

    • 时间复杂度:O(n+k)平均,O(n²)最坏
    • 空间复杂度:O(n+k)
    • 稳定排序
  3. 基数排序(Radix Sort)

    • 时间复杂度:O(nk)
    • 空间复杂度:O(n+k)
    • 稳定排序

查找算法

  1. 顺序查找(Sequential Search)

    • 时间复杂度:O(n)
    • 空间复杂度:O(1)
  2. 二分查找(Binary Search)

    • 时间复杂度:O(log n)
    • 空间复杂度:O(1)
    • 要求数组有序
  3. 哈希查找(Hash Search)

    • 时间复杂度:O(1)平均,O(n)最坏
    • 空间复杂度:O(n)
  4. 二叉搜索树查找(BST Search)

    • 时间复杂度:O(log n)平均,O(n)最坏
    • 空间复杂度:O(n)

图算法

  1. 深度优先搜索(DFS)

    • 时间复杂度:O(V+E)
    • 空间复杂度:O(V)
  2. 广度优先搜索(BFS)

    • 时间复杂度:O(V+E)
    • 空间复杂度:O(V)
  3. Dijkstra算法(单源最短路径)

    • 时间复杂度:O((V+E)log V)使用优先队列
    • 空间复杂度:O(V)
  4. Bellman-Ford算法(单源最短路径,可处理负权边)

    • 时间复杂度:O(VE)
    • 空间复杂度:O(V)
  5. Floyd-Warshall算法(所有节点对最短路径)

    • 时间复杂度:O(V³)
    • 空间复杂度:O(V²)
  6. Prim算法(最小生成树)

    • 时间复杂度:O(E log V)
    • 空间复杂度:O(V)
  7. Kruskal算法(最小生成树)

    • 时间复杂度:O(E log E)
    • 空间复杂度:O(E)
  8. 拓扑排序(Topological Sort)

    • 时间复杂度:O(V+E)
    • 空间复杂度:O(V)

字符串匹配算法

  1. 朴素算法(Brute Force)

    • 时间复杂度:O(mn)
    • 空间复杂度:O(1)
  2. KMP算法(Knuth-Morris-Pratt)

    • 时间复杂度:O(m+n)
    • 空间复杂度:O(m)
  3. Boyer-Moore算法

    • 时间复杂度:O(mn)最坏,O(n/m)最佳
    • 空间复杂度:O(m)
  4. Rabin-Karp算法(基于哈希)

    • 时间复杂度:O(m+n)平均,O(mn)最坏
    • 空间复杂度:O(1)

树相关算法

  1. 二叉树遍历

    • 前序、中序、后序遍历
    • 时间复杂度:O(n)
    • 空间复杂度:O(h),h为树高
  2. AVL树插入/删除

    • 时间复杂度:O(log n)
    • 空间复杂度:O(n)
  3. 红黑树插入/删除

    • 时间复杂度:O(log n)
    • 空间复杂度:O(n)
  4. B树/B+树操作

    • 时间复杂度:O(log n)
    • 空间复杂度:O(n)

动态规划经典问题

  1. 斐波那契数列
  2. 背包问题(0-1背包、完全背包)
  3. 最长公共子序列(LCS)
  4. 最长递增子序列(LIS)
  5. 矩阵链乘法
  6. 最短路径问题
  7. 编辑距离

贪心算法经典问题

  1. 活动选择问题
  2. 霍夫曼编码
  3. 最小生成树(Prim/Kruskal)
  4. Dijkstra算法
  5. 分数背包问题

分治算法经典问题

  1. 归并排序
  2. 快速排序
  3. Strassen矩阵乘法
  4. 最近点对问题
  5. 大整数乘法

以上是数据结构中常见的经典算法总结,每种算法都有其适用的场景和优缺点,在实际应用中需要根据具体问题选择合适的算法。