对元素序列如何进行堆排序就此题讲一下堆排序是怎样进行的

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 07:02:04

对元素序列如何进行堆排序就此题讲一下堆排序是怎样进行的
对元素序列如何进行堆排序



就此题讲一下堆排序是怎样进行的

对元素序列如何进行堆排序就此题讲一下堆排序是怎样进行的
首先说一个知识点,就是用数组操作二叉树(把堆看成二叉树容易理解)

一个数组a[n],a[0]不考虑舍弃,a[1]为根节点那么,a[i]的两个孩子节点就是a[2i]和a[2i+1] (不理解的话自己做下实验),好了那么k[i]<=k[2i]且k[i]<=k[2i+1](1<=i<= n),当然,这是小根堆,大根堆则换成>=号.
用小根堆排序的基本思想(用小根堆排序其排序结果是递减有序的,大根堆排序是递增有序)
先将初始数组k[1..n]建成一个小根堆
此堆为初始的无序区再将最小的记录k[1](即堆顶)和无序区的最后一个记录k[n]交换,由此得到新的无序区k[1..n-1]和有序区k[n],且满足k[1..n-1]<=k[n]
由于交换后新的根节点k[1]可能违反堆性质,故应将当前无序区k[1..n-1]调整为堆.然后再次对k[1..n-1]进行上面重复的操作.直到无序区只有一个元素为止.那么排序也就算结束了.
这就是堆排序的思想
你的题目上说的是原始数据构成的初始堆
7  3 5 9 1 12 实际上是这样的
          7
      3      5
 9   1        12
5和12比较不变,9,1和3比较调换1和3的位置1,5和7比较调换1和7的位置则变成这样
          1
      7      5
 9   3        12
还不满足小根堆继续比较9,3和7比较替换3和7的位置3,5和1比较不用换
          1
      3      5
 9   7        12
满足小根堆了,所以初始堆为1,3,5,9,7,12(选B)
还不懂的话这里有个动态模拟过程

对元素序列如何进行堆排序就此题讲一下堆排序是怎样进行的 对元素序列如何进行堆排序就此题讲一下堆排序是怎样进行的 对同一个基本有序的待排序列分别进行堆排序、快速排序和冒泡排序,最省时间的算法是___________ 已知一关键码序列为:3,87,12,61,70,97,26,45.试根据堆排序原理,建立堆结构:_____________建立堆结构:97,87,26,61,70,12,3,45 是如何建立堆排序的? 数据结构中如何通过堆定义判别序列为堆? 初始堆是什么?是已经用堆排序排完的最终的堆吗? 这样一组数 45 28 49 16 37 82 56 75初始堆后,利用堆排序怎么排,规律是什么?高人能不能讲述一下初始堆和堆排序的区别是什么呀? 数据结构堆排序试将(40,38,60,95,76,10,99)用堆排序的方法从小到大排序,要求写出过程(每拍好一个元素序列的变化) 有关堆排序设有关键码序列(Q,G,M,Z,A,N,B,P,X,H,Y,S,T,L,K,E)采用堆排序法进行排序,经过初始建堆后B在序列中的序号?二叉树的图我看过了,就是不知道他怎么排成这样的,堆排序到底是什么排序, 堆排序算法中如何计算元素比较次数和移动次数 不能每次将至少一个元素放在最终位置上的是什么排序: A:冒泡 B:插入 C:快排 D:堆排序 E:记数排序 请问这道数据结构的堆排序怎么做啊若对顺序存储在A[1]~A[9]的记录(76,38,62,53,80,74,83,65,85)进行堆排序,已知除第一个元素76外,以其与元素为根的结点都已是堆,则对第一个元素进行筛运算时,它将 已知关键字序列(56,30,71,29,97,83,74,64,76,48),采用堆排序算法进行递增排序,给出前5各趟排 【讨论】请问堆排序出来的序列通过堆排序,大根堆 出来的是降序还是升序[] 试分析序列{100,28,76,35,61,29,38,40,23,20,56,5}是否为最大堆?如果不是,试根据堆排序算法对其进行调整,并画出调整过程所对应的二叉树. 求解一道 数据结构 堆排序的题 对n个元素的序列进行冒泡排序时,最少的比较次数是 什么是核电厂的“封堆”?“封堆”如何具体进行?