pqsort| 青训营笔记

75 阅读2分钟

数据结构与算法

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

例子:直播礼物数排行榜功能

解决方法:路无数据存储在Redis-zset中,使用skiplist使得元素整体有序

采用Redis集群,避免单机压力过大

采用分片、分页算法,需要保证一致性

go1.19算法是如何设计的、生产环境中使用的排序算法与课本上的排序算法有什么区别

经典排序算法:INSERTION Sort插入排序,将元素不断的插入已经排序好的array中,最优情况时间复杂度O(n) 平均时间复杂度O(n^2)

quick sort快速排序:基于分治的思想,不断的分割序列,直至整体有序,最优时间复杂度O(nlog(n)) 平均时间复杂度O(nlog(n)),最坏情况时间复杂度O(n^2)

heap sort 堆排序:利用堆的性质形成的排序算法,最优时间复杂度O(nlog(n)) 平均时间复杂度O(nlog(n)),最坏情况时间复杂度O(n*log(n))

pqsort:用于go1.19的排序算法,其是一种不稳定的混合排序算法,堆常见的序列类型做了特殊的优化,使得在不同条件下都拥有不错的性能

pqsort结合三种方法的优点:对于短序列采用插入排序,其他情况使用快速排序保证整体性能,当快速排序表现不佳时,使用堆排序保证最坏的情况下的排序性能

当最终的pivot的为止离序列两端很接近时,判定其表现不佳,当这种情况的次数到达limit时,采用堆排序

如何让qpsort的速度更快:尽量使得快排的pivot为序列的中位数,我们需要平衡寻找pivot的开销与pivot带来的性能优化