数据结构与算法 | 青训营笔记

88 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

数据结构与算法

为什么学习数据结构与算法

  • 实际问题的解决需要数据结构和算法
  • 用于提高效率
  • 保证程序结构以及逻辑更加合理等

经典排序算法

  1. 插入排序
    分为有序序列和无序序列,逐个将无序序列中的数据按序插入到有序序列中。
    起始条件为第一个数据为有序序列,其它数据为无序序列。
    当数据量较少时,或者数据本身有序时性能较好。
  2. 快排
    最常用的排序方式,采用分治思想
    具体实现使用递归方式(或者栈也行)
    具体步骤为选择基准数,根据基准数分区
    重复以上操作直至所有分区只剩下唯一数字
  3. 堆排
    使用这种数据结构的特性进行排序,是一种稳定的排序方式
    实际操作中通过构造大顶堆或者小顶堆的方式进行排序

从零开始打造pdqsort

一种不稳定的混合排序算法,在不同条件下都拥有不错的性能。

  • 两个问题:
    1. 如何确定短序列具体长度 (24)
    2. 怎么确定快排性能不佳,从而切换至堆排
      由pivot决定
    3. 优化:
      • 升级pivot选择策略(近似中位数)
      • 发现序列可能逆序时,翻转序列
      • 发现序列可能有序时,使用有限插入排序
      • 重复度较高时,将重复元素排列到一起
      • 选择策略表现不佳时,随机交换元素
    4. 测试结果
      • 有序或逆序时,性能提升10倍
      • 其它情况提升10-50%

高性能排序算法的设计

根据不同的情况,采用不同的排序策略,即根据数据本身的特征选择当前最合适的排序算法,而数据特征由pivot和序列长度决定