按照堆排序的方式原地进行升序排列
2017-04-24 20:20
579 查看
题目:将整数数组(7-6-3-5-4-1-2)按照堆排序的方式原地进行升序排列,请问在第一轮排序结束后,数组的顺序是()
A.2-6-3-5-4-1-7
B.6-2-3-5-4-1-7
C.6-5-3-2-4-1-7
D.1-5-3-2-4-6-7
E.5-4-3-2-1-6-7
F.5-1-3-2-4-6-7
答案:C
解析:因为是原地进行升序排列,所以应该是建立大根堆;如果是原地进行降序排列,应该建立小根堆。
第一步:先建立大根堆,因为给定的数组就是大根堆,所以就不需要建立大根堆了。大根堆图如下:
第二步:堆建好之后开始排序,堆顶就是最大值,取出放入数组中的最后一个位置,将堆底(数组中的最后一个元素)放入堆顶。因为这一操作会破坏堆,需要将前n-1个元素调整为堆。这样一轮排序就结束了。
调整为大根堆之后:
所以在第一轮排序结束后,数组的顺序是:6-5-3-2-4-1-7
A.2-6-3-5-4-1-7
B.6-2-3-5-4-1-7
C.6-5-3-2-4-1-7
D.1-5-3-2-4-6-7
E.5-4-3-2-1-6-7
F.5-1-3-2-4-6-7
答案:C
解析:因为是原地进行升序排列,所以应该是建立大根堆;如果是原地进行降序排列,应该建立小根堆。
第一步:先建立大根堆,因为给定的数组就是大根堆,所以就不需要建立大根堆了。大根堆图如下:
第二步:堆建好之后开始排序,堆顶就是最大值,取出放入数组中的最后一个位置,将堆底(数组中的最后一个元素)放入堆顶。因为这一操作会破坏堆,需要将前n-1个元素调整为堆。这样一轮排序就结束了。
调整为大根堆之后:
所以在第一轮排序结束后,数组的顺序是:6-5-3-2-4-1-7
相关文章推荐
- 输入5个同学的姓名,将这些姓名按照字符串的大小进行升序排列并输出(C++语言)
- 输入一个5X5的二维数组,将数组进行排序,其中一维数组按照平均值降序,一维数组内部升序排列。
- C# 数组按照升序排列并输出(分别用冒泡法,选择法,插入法进行排序)。
- P318_118 合并两个链表,并按照学号升序排列。用类冒泡排序法对链表进行排序
- 请通过代码实现以下功能:输入一个5X5的二维数组,将数组进行排序,其中一维数组按照平均值降序,一维数组内部升序排列。
- 根据条件,进行升序或降序排列,两种方式的比较。
- 用面向对象解决:输入一个5X5的二维数组,将数组进行排序,其中一维数组按照平均值降序,一维数组内部升序排列
- 输入一个5X5的二维数组,将数组进行排序,其中一维数组按照平均值降序,一维数组内部升序排列。
- 科学的发现很少会像门外汉所想象的一样,按照直接了当合乎逻辑的方式进行的。”
- 根据订单ID进行升序或降序排列
- 传入一个数组进行排列,奇数在前升序,偶数在后降序,在程序执行中不能开辟新数组空间
- C语随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,
- 2>.设两个二维数组,分别用两种方式进行初始化,并分别按照行优先(先输出第一行所有值,再输出第二行)、列优先(先输出第一列的所有值,再输出第二列)的次序输出。
- 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,如果
- 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,如果
- 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数放入数组b中,如
- 编写程序实现以下功能: 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条
- dedecms 按照ID升序 降序排列方法
- 数据结构中线性表的基本操作-合并两个线性表-按照元素升序排列
- 对一个存储学生信息的单向链表,按照学号升序对链表进行排序,每个节点包含了一个学生ID