数据结构 堆排序问题,高手请进

来源:百度知道 编辑:UC知道 时间:2024/06/15 17:55:10
将数据序列(46,25,78,62,12,37,70,29)进行降序排序,请写出堆排序的初建堆过程,如果不能写出,就口述,

从最后一个有孩子节点的元素开始到第一个元素为止
1:筛选62得序列(46,25,78,29,12,37,70,62)
2:筛选78得序列(46,25,37,29,12,78,70,62)
3:筛选25得序列(46,12,37,29,25,78,70,62)
4:筛选46得序列(12,25,37,29,46,78,70,62)分两步

代码
/*小根树*/#include<iostream>
using namespace std;
int a[10000];
int n;
void check(int i)
{
int min;
if(2*i<n)
{
if(n%2==0&&i==n/2)
min=2*i;
else
min=a[2*i]<a[2*i+1]?2*i:2*i+1;
if(a[i]>a[min])
{
a[0]=a[i];
a[i]=a[min];
a[min]=a[0];
check(min);
}
}
}
void bheap()
{
for(int i=n/2/*最后一个有子的节点*/;i>0;i--)
check(i);/*最多N次*/
}
int main()
{
cin>>n;
int i;
for(i=1;i<=n;i++)
cin>>a[i];
bheap();
for(i=n;i>=1;i--)
{
cout<<a[1]<<endl;