首页 > 职场文档 > 工作总结

堆排序算法的基本操作是优秀

网络整理

【简介】感谢网友“网络整理”参与投稿,这里小编给大家分享一些,方便大家学习。

在日常学习、工作或生活中,大家总少不了接触作文或者范文吧,通过文章可以把我们那些零零散散的思想,聚集在一块。范文书写有哪些要求呢?我们怎样才能写好一篇范文呢?下面我给大家整理了一些优秀范文,希望能够帮助到大家,我们一起来看一看吧。

堆排序算法的基本操作是篇一

我们通常所说的堆是指二叉堆,二叉堆又称完全二叉树或者叫近似完全二叉树。二叉堆又分为最大堆和最小堆。

堆排序(heapsort)是指利用堆这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。数组可以根据索引直接获取元素,时间复杂度为o(1),也就是常量,因此对于取值效率极高。

最大堆的特性如下:

父结点的键值总是大于或者等于任何一个子节点的键值 每个结点的左子树和右子树都是一个最大堆

最小堆的特性如下:

父结点的键值总是小于或者等于任何一个子节点的键值 每个结点的左子树和右子树都是一个最小堆

1.最大堆的算法思想是:

先将初始的r[0…n-1]建立成最大堆,此时是无序堆,而堆顶是最大元素

再将堆顶r[0]和无序区的最后一个记录r[n-1]交换,由此得到新的无序区r[0…n-2]和有序区r[n-1],且满足r[0…n-2].keys ≤ r[n-1].key

由于交换后,前r[0…n-2]可能不满足最大堆的性质,因此再调整前r[0…n-2]为最大堆,直到只有r[0]最后一个元素才调整完成。

最大堆排序完成后,其实是升序序列,每次调整堆都是要得到最大的一个元素,然后与当前堆的最后一个元素交换,因此最后所得到的序列是升序序列。

2.最小堆的算法思想是:

先将初始的r[0…n-1]建立成最小堆,此时是无序堆,而堆顶元素是最小的元素

再将堆顶r[0]与无序区的最后一个r[n-1]交换,由此得到新的无序堆r[0…n-2]和有序堆r[n-1],且满足r[0…n-2].keys >= r[n-1].key

由于交换后,前r[0…n-2]可能不满足最小堆的性质,因此再调整前r[0…n-2]为最小堆,直到只有r[0]最后一个元素才调整完成

最小堆排序完成后,其实是降序序列,每次调整堆都是要得到最小的一个元素,然后与当前无序堆的最后一个元素交换,所以所得到的序列是降序的。

提示:堆排序的过程,其实就是不断地扩大有序区,然后不断地缩小无序区,直到只有有序区的过程。

因为算法比较抽象,这里直接通过举个小例子来说明堆排序的过程是如何的`。下面我们用这个无序序列采用最大堆的进行堆排序,所得到的序列就是升序序列(asc)。

无序序列:89,-7,999,-89,7,0,-888,7,-7

第一步:初始化建成最大堆:

第二步:将堆顶最大元素999与无序区的最后一个元素交换,使999成为有序区。交换后,-7成为堆顶,由于-7并不是无序区中最大的元素,因此需要调整无序区,使无序区中最大值89成为堆顶,所以-7与89交换。交换后导致89的右子树不满足最大堆的性质,因此要对右子树调整成最大堆,所以-7要与0交换,如下图:

从图中看到,当-7成89交换后,堆顶是最大元素了,但是-7的左孩子是0,右孩子是-888,由于-7<0,导致-7这个结点不满足堆的性质,因此需要调整它。所以,0与-7交换。

然后不断重复着第二步的过程,直到全部成为有序区。

最后:所得到的是升序序列

堆排序的时间,主要由建立初始堆和反复调整堆这两部分的时间开销构成.由于堆排序是不稳定的,它得扭到的时间复杂度会根据实际情况较大,因此只能取平均时间复杂度。

平均时间复杂度为:o( n * log2(n) )

堆排序耗时的操作有:初始堆 + 反复调整堆,时间复杂度如下:

1.初始建堆:每个父节点会和左右子节点进行最多2次比较和1次交换,所以复杂度跟父节点个数有关。根据2x <= n(x为n个元素可以折半的次数,也就是父节点个数),得出x = log2n。即o ( log2n )

2.反复调整堆:由于初始化堆过程中,会记录数组比较结果,所以堆排序对原序列的数组顺序并不敏感,最好情况和最坏情况差不多。需要抽取 n-1 次堆顶元素,每次取堆顶元素都需要重建堆(o(重建堆) < o(初始堆))。所以小于 o(n-1) * o(log2n)

由于初始化堆需要比较的次数较多,因此,堆排序比较适合于数据量非常大的场合(百万数据或更多)。由于高效的快速排序是基于递归实现的,所以在数据量非常大时会发生堆栈溢出错误。

s("content_relate");

【java堆排序的算法思想的分析】相关文章:

1.

权重随机算法的java实现

2.

java中shuffle算法的使用

3.

java常见的排序算法的代码

4.

java常用的7大排序算法

5.

java算法实现排列组合的方法介绍

6.

java数据结构和算法笔记

7.

java方法重写的方法分析

8.

java的应用及前景分析

相关图文

推荐文章

网站地图:栏目 TAGS 范文 作文 文案 学科 百科

信息流广告 周易 易经 代理招生 二手车 网络营销 旅游攻略 非物质文化遗产 查字典 社区团购 精雕图 戏曲下载 抖音代运营 易学网 互联网资讯 成语 成语故事 诗词 工商注册 注册公司 抖音带货 云南旅游网 网络游戏 代理记账 短视频运营 在线题库 国学网 知识产权 抖音运营 雕龙客 雕塑 奇石 散文 自学教程 常用文书 河北生活网 好书推荐 游戏攻略 心理测试 石家庄人才网 考研真题 汉语知识 心理咨询 手游安卓版下载 兴趣爱好 网络知识 十大品牌排行榜 商标交易 单机游戏下载 短视频代运营 宝宝起名 范文网 电商设计 免费发布信息 服装服饰 律师咨询 搜救犬 Chat GPT中文版 经典范文 优质范文 工作总结 二手车估价 实用范文 古诗词 衡水人才网 石家庄点痣 养花 名酒回收 石家庄代理记账 女士发型 搜搜作文 石家庄人才网 钢琴入门指法教程 词典 围棋 chatGPT 读后感 玄机派 企业服务 法律咨询 chatGPT国内版 chatGPT官网 励志名言 河北代理记账公司 文玩 语料库 游戏推荐 男士发型 高考作文 PS修图 儿童文学 买车咨询 工作计划 礼品厂 舟舟培训 IT教程 手机游戏推荐排行榜 暖通,电地暖, 女性健康 苗木供应 ps素材库 短视频培训 优秀个人博客 包装网 创业赚钱 养生 民间借贷律师 绿色软件 安卓手机游戏 手机软件下载 手机游戏下载 单机游戏大全 免费软件下载 石家庄论坛 网赚 手游下载 游戏盒子 职业培训 资格考试 成语大全 英语培训 艺术培训 少儿培训 苗木网 雕塑网 好玩的手机游戏推荐 汉语词典 中国机械网 美文欣赏 红楼梦 道德经 标准件 电地暖 网站转让 鲜花 书包网 英语培训机构 电商运营