js中快速排序的优化历程

   日期:2024-12-16    作者:caijiyuan 浏览:70    移动:http://w.yusign.com/mobile/quote/831.html

对sort的疑惑

自从es6出现后,我们不知不觉就用上了sort进行排序,毕竟人家又快又好。那么sort究竟怎么实现的呢

参考了一下大佬的文章(三种快速排序以及快速排序的优化,我便悄悄拿起了键盘。

思路分析这些我就不写了,请移步大佬博客参照,由于大佬使用的java代码,我便用js来进行验证一下。

排序条件以及优化结果

根据大佬的分析,数组排序要面对的有以下四种情况,我们用1w个随机值为例进行一下测试,结果如下:

数组情况随机数组升序数组降序数组重复数组解决的问题固定基准值2929532920282解决随机数组的排序问题随机基准值362011277解决有序数组的排序问题三数取中301111256解决反向有序数组的排序问题三数取中+插排301111263优化排序效率,1w可能看不太出来,100w个数据效果更明显三数取中+插排+聚同228821解决重复数据较多时的排序问题sort18829解决了以上的几个问题
  • 随机数组
     
  • 升序数组
     
  • 降序数组
     
  • 重复数组
     
  • 比较方式,使用了来计算时间
     
快速排序优化1之固定基准值
 
快速排序优化2之随机基准值

js中快速排序的优化历程

 
快速排序优化3之三数取中
 
快速排序优化4之三数取中+插排
 
快速排序优化5之三数取中+插排+聚同
 
结语

使用最后一层优化后,结果依然和原生sort有一定的差距,但是大致相差不是远。本想用100w个数据来测试,但是前两种方法直接让控制台死机,但只要能得出结果就ok,可见直接用快速排序并不能达到最佳效果。

追加总结1

今天对第五种方案进行了一些优化,去掉了多余 的判断。并且重新对 原生 js 的 进行测试,它的表现依旧非常出色。在写 的时候,我也发现了一个非常重要的注意事项,那就是一定要记着 ,这个方法其实就是为了解决高浓度重复数组的排序问题。效果等同,甚至优于聚同方案

写法如下

 

参考文献

本文地址:http://w.yusign.com/quote/831.html    述古往 http://w.yusign.com/static/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关行情
推荐行情
点击排行
{
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号