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

一站式网站建设服务西安城乡住房建设厅网站

一站式网站建设服务,西安城乡住房建设厅网站,中企动力中山分公司网站,淘宝客wordpressC STL sort函数的底层实现 sort函数的底层用到的是内省式排序以及插入排序,内省排序首先从快速排序开始,当递归深度超过一定深度(深度为排序元素数量的对数值)后转为堆排序。 先来回顾一下以上提到的3中排序方法: 快…

C++ STL sort函数的底层实现

sort函数的底层用到的是内省式排序以及插入排序,内省排序首先从快速排序开始,当递归深度超过一定深度(深度为排序元素数量的对数值)后转为堆排序。

先来回顾一下以上提到的3中排序方法:

  1. 快速排序:先选一个基准值(一般为首值),将比它大的数置于其右侧,将比它小的数置于它左侧,那么这个基准值所在的位置定是整个数组的有序位。然后递归该基准左右两子数组。算法复杂度为nlogn;
  2. 堆排序:将数组建立成大顶堆,重复从堆顶取出数值最大的结点(把根结点和最后一个结点交换,把交换后的最后一个结点移出堆,移出的这个数值为未排序数组的最后),并让残余的堆维持大顶堆的性质。时间复杂度为nlogn;
  3. 插入排序:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。时间复杂度为n2;

其中先讲下快排和堆排,快排的平均复杂度为nlogn,但是它的复杂度是根据基准值来决定的,基准值选择的不好,最坏的复杂度会达到n2,而堆排序的复杂度是一定的为n*logn,那为什么不直接使用堆排序呢,是因为在将堆顶值与最后一个结点值交换并移除最后一个值后,在重新建堆的过程中,交换到堆顶的值显然比每个结点要小,但还是要经过对比判断,这个判断其实是多余的,因此这是它相比快排较慢的原因。

于是,内省式排序结合了快排和堆排的特点,当快速排序到大一定深度(2logn)时,采用堆排序,以维持n*logn的复杂度。

在sort函数中,内省排序过程中子数组长度小于16时,采用的是插入排序,因为当数组长度较短时,就是数组已经大致排序过了,对大致有序的数组(即逆序对不多了)用插入排序的算法复杂度会很小,可以想象成理牌的过程。

http://www.15wanjia.com/news/186668.html

相关文章:

  • 为什么买的网站模版不好用北京seo外包平台
  • 合肥网站建设q479185700強网站建设项目验收报告书
  • 七米网站建设建设网站之前都需要准备什么
  • 网站灰色代码网站开发手把手
  • 做网站时字幕怎么做网站标题做参数
  • 如何做kindle电子书下载网站装修设计公司logo
  • 静态网站开发实训的目的武当王也高清壁纸
  • 学做美食网站哪个好免费网站空间申请
  • 用php做网站要用什么软件汕头网页搜索排名提升
  • 国内站长做国外网站成都房地产网站建设
  • 长春建站模板展示宁夏做网站找谁
  • 网站建设教学点wordpress后台功能添加
  • wap视频网站建设难吗打不开wordpress站点
  • 有专业做线切割配件的网站吗免费seo关键词优化方案
  • 最简单的网站开发软件网站qq在线状态
  • 域名网络的解析网站虚拟主机和云服务器
  • 关于销售网站建设的短文学院网站开发竞争对手分析
  • h5手机制作网站开发百度网盟推广有哪些网站
  • 大型网站开发项目书籍快件网站建设
  • 58网站开发要多少钱wordpress自动更新发布
  • 如东建设网站2008 iis wordpress
  • 检察机关门户网站建设wordpress的json api
  • 技术支持 海安网站建设网络营销方式对比
  • 网站建设终端是什么陈铭生杨昭原型
  • 网站建设与开发学习西湖南昌网站建设公司
  • wdlinux 默认网站岳阳注册公司
  • 博客网站排名电脑制作网页的软件
  • 表格如何给网站做链接地址wordpress素材下载源码
  • html网站模板下载网页小游戏开发
  • 谷歌网站收录入口最近的国际新闻大事件