首页 > 试题广场 >

将整数数组( 7-6-3-5-4-1-2 )按照堆排序的方式

[单选题]

将整数数组( 7-6-3-5-4-1-2 )按照堆排序的方式进行升序排列,请问在第一轮排序结束之后,数组的顺序是()

  • 1-2-3-4-5-6-7
  • 2-6-3-5-4-1-7
  • 6-5-3-2-4-1-7
  • 5-4-3-2-1-6-7
推荐
C
首先原始堆如左上角图所示,堆排序首先将堆顶元素与最后一个元素互换,形成右上角的图,然后对未排序的部分维护堆的性质,从堆顶元素开始互换,2的左右分别是6和3,由于6比3大,因此2与6互换形成左下角的图,然后2的左右分别是5和4,由于5比4大,因此2与5互换形成最终的堆如右下角图所示
因此顺序为6532417

编辑于 2017-03-18 09:03:46 回复(10)
初始顺序为7-6-3-5-4-1-2,将初始顺序调整为最大堆,发现顺序没有变,也7是最大值。这时,把最大值7与堆中的最后一个数2进行调换位置,不再把最后一位算在内,将前后的6个数字调整为最大堆6-5-3-2-4-1-7。后续是把6与倒数第二个换顺序再建最大堆吗?也就是每次用堆输出一个最大值,把最大值放在最后,最后直接从堆顶依次输出就是升序序列了,所以是组建大根堆?
发表于 2017-06-09 23:39:10 回复(0)
初始顺序为:7-6-3-5-4-1-2,将初始顺序调整为最大堆,发现顺序没有变,7是最大值。
这时,把最大值7与堆中的最后一个数2进行调换位置,就不把最后一位算在内,将前后的6个数字调整为最大堆:6-5-3-2-4-1-7.


发表于 2017-01-02 19:59:29 回复(0)
堆排序基本思想:输出堆顶元素,用当时堆中最后一个元素代替堆顶元素,筛选完全二叉树节点使之满足堆的定义。
发表于 2017-08-07 10:09:17 回复(0)
单纯的首尾结点交换并不算一轮排序结束了,首尾结点交换后把堆重新调整为大根堆后才算一轮排序结束了。
发表于 2019-10-13 17:59:58 回复(0)
http://www.cnblogs.com/mengdd/archive/2012/11/30/2796845.html大家看下这个就明白了
发表于 2017-03-20 20:32:13 回复(0)
完成一轮堆排序:
(1)换位置(建堆)
(2)删除堆顶
(3)最后一个元素放到堆顶
(4)重新换位置(重新建堆)
(5)排序
删除的堆顶放在排序数的最后,所以升序——大顶堆;降序——小顶堆
编辑于 2018-09-16 23:27:20 回复(0)
小顶堆输出升序,排序降序;大顶堆输出降序(关注堆顶),排序升序(关注堆底)
发表于 2018-03-11 14:56:42 回复(0)
意思就是要把大顶堆转换成小顶堆。转换第一步把2和7调换之后再除去7之后进行大顶堆的调整
发表于 2017-07-28 18:13:03 回复(0)
大家对升降序部分可能有点疑惑。先给一个结论:如果想要数组升序就建立大顶推,如果想要数组降序就建立小顶推。 大家要注意,所需要排序的部分是交换到最后一个结点的部分,是这部分排序的,而不是建堆的部分。所以每次建堆的部分为最大堆,根结点变成最大值,然后与最后一个结点交换,所以最后一个结点再出去,最终成为一个题目所要求的成为升序。
编辑于 2017-07-29 10:18:06 回复(0)
既然是升序排列为啥不调整成最小堆,这样每次交换后可以得到最小值啊!
发表于 2017-03-10 09:06:09 回复(5)
从建堆的角度来分析: 先从选项中进行判断是大根堆还是小根堆,根据堆排序每轮一定归位一个元素的原理,直接看最后一个元素,是7→为大根堆。 再回想大根堆建堆过程,怎么才能对最大的元素进行便捷操作?把最大元素放堆顶,6为第二大元素。 Ps.排序的结果是小根堆
发表于 2019-11-20 07:21:52 回复(0)

原始数组已经是一个堆,不用在排列就可以直接进行排序

发表于 2019-10-28 20:30:07 回复(0)
注意堆排序每次都移动最后一个元素
发表于 2019-07-17 11:31:15 回复(0)
堆的调整为从上至下;
而建堆是从下至上,左至右。
发表于 2019-05-04 16:58:44 回复(0)
升序就最小堆,降序就最大堆,取得都是最上面的,这题强行往难的弄
发表于 2019-04-14 11:15:29 回复(0)
该题原数组[7,6,3,5,4,1,2]本身已经是大顶堆,相当于将该堆的根(7)节点从堆中删除(置于数组末尾),并将最右侧叶子2作为根节点。然后对剩下的数组[2,6,3,5,4,1]重建大顶堆。重建得到大顶堆为[6,5,3,2,4,1];由于原数组最后一位以被置位7,得最终数组为[7,6,5,3,2,4,1],选C。
补充:堆排序是将数组(如data[n],元素下标范围为1到n-1)建成大顶堆,每次件堆都可以得到该数组的最大元素(堆的根元素),并将最大元素置于数组最后位置data[n-1]。然后对剩下的数组元素继续建大顶堆,找到次最大元素,置于data[n-2],以此类推…
发表于 2019-03-20 11:55:13 回复(0)
:如果想要数组升序就建立大顶推(根大,左右小,因为是从由下向上存储数组的,如果想要数组降序就建立小顶推。 大家要注意,所需要排序的部分是交换到最后一个结点的部分,是这部分排序的,而不是建堆。

发表于 2019-02-06 16:42:52 回复(0)
这个问题的注意点在于:
一趟堆排序包括:交换,调整。
发表于 2018-10-09 22:12:02 回复(0)
一轮排序从堆开始到堆结束: 建堆->交换->调整
编辑于 2018-09-23 12:53:23 回复(0)

堆排序升序用大顶堆,降序用小顶堆


堆排序过程:建堆--交换--调整       一次排序经历过三部曲!!!必须交换后调整

发表于 2018-07-25 15:37:45 回复(0)