堆排序
来源:互联网 发布:天分玻璃优化软件下载 编辑:程序博客网 时间:2024/06/08 20:02
敲着练习一下
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn =100;int a[maxn],n,length;void max_heapify(int a[],int i){ int l=i*2,r=i*2+1,largest; if(l<=length&&a[l]>a[i]) largest=l; else largest=i; if(r<=length&&a[r]>a[largest]) largest=r; if(largest!=i) { swap(a[i],a[largest]); max_heapify(a,largest); } return;}void build_max_heap(int a[])//构建二叉堆{ int i; for(i=n/2;i>=1;i--)//递归每个不是叶子节点的节点,对其调用max_heapify函数,使其满足最大堆性质 { max_heapify(a,i); } return;}void heap_sort(int a[])//利用二叉堆排序{ int i; for(i=n;i>=2;i--) { swap(a[i],a[1]);//每次都把根移到最后面,即最大的(根)放在后面,递增 length--; max_heapify(a,1); } return;}int main(){ printf("输入个数:\n"); scanf("%d",&n); length=n; printf("依次输入n个数:\n"); for(int i=1;i<=n;i++) scanf("%d",&a[i]); build_max_heap(a); printf("二叉堆为:\n"); for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("\n"); heap_sort(a); printf("排序后为:\n"); for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("\n"); return 0;}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- jQuery验证控件jquery.validate.js使用说明+中文API
- C++菜鸟学习笔记1
- mysql 插入出现乱码-解决办法 set names utf8
- Swift基本数据类型
- HttpClient3.x学习整理
- 堆排序
- 【noip模拟赛】数字对
- 运用定义函数来输出 ABCD递增型图像
- ExecutorService生命周期
- AN GridView 横向分页,适合TV等有按键需求的android系统
- 浅析C++绑定到Lua的方法
- Active Contour Models 主动轮廓模型
- Myeclipse+maven的简单使用说明
- js字符串格式化时间