对sort的疑惑
自从es6出现后,我们不知不觉就用上了sort进行排序,毕竟人家又快又好。那么sort究竟怎么实现的呢?
参考了一下大佬的文章(三种快速排序以及快速排序的优化),我便悄悄拿起了键盘。
思路分析这些我就不写了,请移步大佬博客参照,由于大佬使用的java代码,我便用js来进行验证一下。
排序条件以及优化结果
根据大佬的分析,数组排序要面对的有以下四种情况,我们用1w个随机值为例进行一下测试,结果如下:
- 随机数组
- 升序数组
- 降序数组
- 重复数组
- 比较方式,使用了来计算时间
快速排序优化1之固定基准值
快速排序优化2之随机基准值
快速排序优化3之三数取中
快速排序优化4之三数取中+插排
快速排序优化5之三数取中+插排+聚同
结语
使用最后一层优化后,结果依然和原生sort有一定的差距,但是大致相差不是远。本想用100w个数据来测试,但是前两种方法直接让控制台死机,但只要能得出结果就ok,可见直接用快速排序并不能达到最佳效果。
追加总结1
今天对第五种方案进行了一些优化,去掉了多余 的判断。并且重新对 原生 js 的 进行测试,它的表现依旧非常出色。在写 的时候,我也发现了一个非常重要的注意事项,那就是一定要记着 ,这个方法其实就是为了解决高浓度重复数组的排序问题。效果等同,甚至优于聚同方案。
写法如下:
参考文献