后端入门-详解经典排序算法| 青训营笔记

44 阅读1分钟

详解经典排序算法

插入排序:将元素不断插入已经排好序的array中 性能:最好情况O(n)、平均情况O(n^2)、最坏O(n^2)

快速排序:不断分割序列直到序列整体有序 性能:最好情况O(nlogn):每次选择的都是中位数、平均情况O(nlogn)、最坏O(n^2)

堆排序:利用堆的性质形成的排序算法 性能:最好情况O(nlogn)、平均情况O(nlogn)、最坏O(n*logn)

从零开始打造pdsort

版本1 image.png 版本2 优化Pivot: 短序列<8:采样三个元素 中序列<=50:采样三个元素,使用这三个元素中的中位数 中序列>50:采样九个元素,使用这些元素中的中位数

最终版:针对重复元素很多的情况 两次生成的pivot相同,认为重复元素很多 最终版本图片,黄色为可选项,在有序或者逆序情况下相比Go默认排序算法提升十倍速度,其他情况下提升10%-50%。

image.png