前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >堆排序

堆排序

作者头像
饶文津
发布2020-05-31 23:35:04
2980
发布2020-05-31 23:35:04
举报
文章被收录于专栏:饶文津的专栏饶文津的专栏

思想:

1.构建最大堆

2.把根节点和最后一个节点交换,,把堆长度-1,也就不考虑放最后的最大的元素了,再构建最大堆

3.现在第二大的元素在根节点了,我们再重复步骤2,直到堆长度为1

代码语言:javascript
复制
void MaxHeap(int a[],int fa,int n){
    int i,s=a[fa];
    for(i=fa<<1;i<=n;i<<=1){
        if(i<n&&a[i]<a[i+1])i++;
        if(s>a[i])break;
        a[i>>1]=a[i];
    }
    a[i>>1]=s;
}
void BuildHeap(int a[],int n){
    for(int i=n>>1;i>=1;i--)
        MaxHeap(a,i,n);
}
void HeapSort(int a[],int n){
    BuildHeap(a,n);
    for(int i=n;i>=2;i--){
        int t=a[i];
        a[i]=a[1];
        a[1]=t;
        MaxHeap(a,1,i-1);
    }
}

调用:

代码语言:javascript
复制
for(int i=1; i<=n; i++) //注意是从1开始
        cin>>a[i];
HeapSort(a,n);
for(int i=1; i<=n; i++)cout<<a[i]<<" ";
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-11-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档