数据结构与算法优化:day3|青训营笔记

120 阅读1分钟

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

数据结构与算法优化

  • 在所有短序列和已经有序的序列当中,插入排序性能最好
  • 在大部分的情况下,快速排序有比较好的综合性能
  • 几乎在所有的情况下,堆排序的表现都比较稳定

Pdqsort - 简介

全称Pattern- defeating- quicksort

是一种不稳定的排序算法,他对常见的序列类型做了特殊的优化,使得在不同条件下都拥有不错的性能.

  1. v1

    1. 对于短序列 使用插入排序
    2. 对于其他情况 使用快速排序
    3. 当快速排序表现不佳时,使用堆排序来保证最坏条件下时间复杂度仍然为nlogn
  • 短序列一般是24以内

  • 如何得知快速排序性能不佳?

    • 最终的 pivot 位置离序列两端很近的时候,判定不佳,当这种情况发生次数过多,则切换为堆排序
  1. v2

思考关于pivot的选择

  1. 使用首个元素作为pivot:实现简单,但是往往效果不好

  2. 遍历数组,寻找真正的中位数 : 遍历代价很高,性能不好

  3. 寻找近似中位数!!! (对pivot进行采样)

    1. 短序列:选择固定元素
    2. 中序列:采样三个元素
    3. 长序列,采样九个元素

Pivot的采样方式使得我们有探知序列当前状态的能力

  1. Final version