对元素序列如何进行堆排序就此题讲一下堆排序是怎样进行的
来源:学生作业帮助网 编辑:六六作业网 时间:2025/01/31 13:16:31
对元素序列如何进行堆排序就此题讲一下堆排序是怎样进行的
对元素序列如何进行堆排序
就此题讲一下堆排序是怎样进行的
对元素序列如何进行堆排序就此题讲一下堆排序是怎样进行的
首先说一个知识点,就是用数组操作二叉树(把堆看成二叉树容易理解)
一个数组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)
还不懂的话这里有个动态模拟过程