这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记,这篇笔记主要谈我再了解了pdqSort算法后的一些感悟和思考
Insertion Sort插入排序:将元素不断插入已经排序好的array中
Quick Sort 快速排序: 分治思想,不断分割序列知道序列整体有序
Heap sort 堆排序: 利用堆的性质形成的排序算法
从图中可以看到,在最优情况下InsertionSort排序最优,然后其它最优的复杂度是O(n*logn)
然后根据字节跳动给出的数据:
1.在所有短序列和元素有序情况下,插入排序性能最好
2.在大部分的情况下,快速排序有较好的综合性能
3.几乎在任何情况下,堆排序的表现都比较稳定
然后由此,就诞生了pdqsort排序,这种算法集合了上面算法的有点,在不同情况下执行不同的算法,以此来达到最优
具体的算法优化,大家可以去看源码,我在这里也不介绍了,我主要想记录的是这种思想——根据不同情况选择不同策略,取长补短。
我相信大家都经受过选择学习语言时候的纠结和挣扎吧,其实大可不必,我们是需要选择一门精通的语言,但是其他语言我们也是需要学习的,每种语言都有着自己擅长处理的问题,而且让人惊喜的是,要使用他们的这些优点,我们不必学得很深,常见的语言及功能有:
C:操作系统、嵌入式、驱动开发、需要很快速度的算法
C++:图形图像、科研、通信、桌面软件、游戏、游戏服务器
C#:Windows桌面软件、服务器
Java:跨平台的桌面应用,企业级应用,服务器后端;手机应用
GO:高性能服务器应用
Python:Web、科学计算、数据处理
在做大项目的时候,大家完全不需要拘束于语言,可以选择适合的轮子,后面相互调就可以了