当前位置: 首页 > wzjs >正文

门户网站建设百度收录提交网址

门户网站建设,百度收录提交网址,海外代发货平台,中国人民解放军军衔一,概述 书接前文【Java】Arrays.sort:DualPivotQuicksort-CSDN博客 Arrays.sort对基本数据类型使用了双轴快速排序,但是对Object[]类型,则使用了TimSort,TimSort是稳定的排序,它整合了插入排序归并排序,…

一,概述

书接前文【Java】Arrays.sort:DualPivotQuicksort-CSDN博客

Arrays.sort对基本数据类型使用了双轴快速排序,但是对Object[]类型,则使用了TimSort,TimSort是稳定的排序,它整合了插入排序+归并排序,存在空间换时间策略,本文简单解析下此算法实现。

二,实现

入口,Object[]调用Arrays.sort方法

sort内部根据配置策略,使用旧版归并排序,或TimSort,

进入第二个分支,以下sort算法即TimSort,本篇文章分析核心。

TimSort是插入排序+归并排序结合的算法,兼顾了两种排序的优点,比如插入排序时间复杂度最优可以达到O(N),但最差O(N^2)。归并排序是稳定排序,时间复杂度是O(NLogN),空间复杂度O(N),TimSort结合了两种排序优缺点,时间复杂度在O(N)~O(NLogN),空间复杂度是O(N)。

此sort算法分步骤进行如下:

1,计算序列最小分块长度

2,对序列分块进行线性扫描,得到N块有序序列

3,对有序序列进行合并

4,当有序序列最后只剩1块,排序完成,

接下来,看下java内部实现

1,拿到序列size,保存至nRemaining,表示剩余序列长度

2,如果序列长度小于最小分块MIN_MERGE(32),则直接使用插入排序,此处插入排序用的binarySort,算是对查询优化,即插入新item时,会通过二分查找算法快速找到插入位置,这里就简单理解为插入排序即可。

当nRemaining >= MIN_MERGE时,开始计算最小分块个数

minRunLength是返回最小分块长度,由以上注释知,

minRunLength = n (n < MIN_MERGE) or 

MIN_MERGE/ 2 <= minRunLength <= MIN_MERGE,使得得到的序列个数n/k接近2的幂数,

此处不赘述

下一步,对最小分块进行排序,

1,线性扫描一遍,简单将指针经过序列排序,

2,如果得到的runLen长度(已有序块)< 最小分块长度,则调用插入排序重新排序,否则就忽略,

这个runLen可能是1,也可能是整个序列长度(序列原本有序),经过以上步骤,会将原序列分成N个有序序列,

下一步,将扫描有序序列入栈,并且合并,如下

栈使用数组记录,保存了每个分块的起点位置和长度,

mergeCollapse可能对stack中分组进行合并,合并算法不赘述,

最后,当整个序列合并完成后,stack中只存在一个序列,done

http://www.dtcms.com/wzjs/347349.html

相关文章:

  • 网站虚拟主机建设深圳排名seo
  • 网站升级改版的目的青岛网站设计公司哪家好
  • 风中有朵雨做的云网站观看seo刷排名公司
  • 成都网站建设吧黄页网站推广服务
  • 温州企业网站建设要多少钱西安seo优化
  • 免费微信网站制作中国制造网网站类型
  • 下载别人网站的asp介绍网络营销
  • 万网如何做网站关键词指数查询
  • 做哪种网站流量上的快软服业营收破334亿
  • 餐饮网站界面找回原来的百度
  • 响应式网站 做搜索推广缺点关键词免费网站
  • 百度医疗网站建设关键词seo排名优化
  • 国际网站建设招标苏州关键词优化怎样
  • 做网站 数据标准湖南seo推广多少钱
  • 哪些香港网站不能访问公司百度官网优化
  • 游戏推广公司成都seo优化外包公司
  • 安溪县建设局网站营销宝
  • 济南做网站优化价格全国疫情排行榜
  • 网站建设工程师证书营销推广策划及渠道
  • 做网站就用建站之星辽宁seo推广
  • 室内设计师培训零基础百度seo优化系统
  • 网站建设开发公司百度推广售后客服电话
  • 小程序商城首页设计南京搜索引擎推广优化
  • 专门做日本旅行网站谷歌外贸网站推广
  • 台州优化官方网站口碑营销例子
  • wordpress页面后台登录百度搜索推广优化师工作内容
  • 富阳营销型网站建设免费网络营销软件
  • bootstrap框架制作网页网站文章优化技巧
  • 定制型网站建设推广潍坊seo推广
  • 网站建设方案书是啥最新国际新闻头条今日国际大事件