大堆顶和小堆顶的初始堆排序怎么建立初始堆排

假设我们有一个数组int a[]={3,5,4,7,1,2},如果把这个數组看作是完全二叉树的顺序存储那么它对应图1-1(a)完全二叉树。

所谓最大堆就是a[i]>=a[2i+1], 且a[i]>=a[2i+2](i在此处对应0~5)这个描述即第四步的结果。也就是说我们紦数组a经过4步调整最终构建出了它的最大堆,如图1-1(d)另外需要说明的一点就是最大堆的调整始终是以非叶子结点调整(红色部分实际上昰创建初始堆的核心代码)。

实际运行结果:只打印了三行其实主要原因是在i=0时第三次和第四次排序一起做了,

另外:寻找非叶子结点可以用(数组长度-1)/2(最靠近叶子结点的父结点),开始逐次递减,但最终到0(也就是根结点)

以上仅仅只是创建堆的算法堆排序算法是在此基础上进行的。

}
 //经过上面的for循环是把二叉树变荿了大顶堆
 {//把 编号1 和编号i位置进行交换 
 //把i结点的子树变成大顶堆
}

我要回帖

更多关于 堆排序怎么建立初始堆 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信