poj 2388 堆排序
2016-07-28 09:55
232 查看
找中位数
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define father(i) (i>>1) #define left(i) (i<<1) #define right(i) (i<<1|1) #define swap(a,b) {int t=a;a=b;b=t;} int heap_size; int a[10010]; void max_heapify(int i) { int l=left(i); int r=right(i); int largest; if(l<=heap_size&&a[l]>a[i]) largest=l; else largest=i; if(r<=heap_size&&a[r]>a[largest]) largest=r; if(largest!=i){ swap(a[i],a[largest]); max_heapify(largest); } } void build_max_heap() { for(int i=heap_size/2;i>=1;i--) max_heapify(i); } void heap_sort() { for(int i=heap_size;i>=2;i--){ swap(a[1],a[i]); heap_size--; max_heapify(1); } } int main() { int n; //freopen("in.txt","r",stdin); while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); heap_size=n; build_max_heap(); heap_sort(); printf("%d\n",a[n/2+1]); } return 0; }
相关文章推荐
- Spring4笔记----使用外部属性文件配置 bean
- JS 中document.URL 和 windows.location.href 的区别
- IPv4与IPv6数据报格式详解
- SQL Server 存储过程遇到“表 '#TT' 没有标识属性。无法执行 SET 操作”错误
- JavaScript中的上溢、下溢和被零整除
- Java技巧--修改Eclipse默认Workspace路径
- Redis简介
- JAVA二进制.位运算.移位运算
- TCP协议的连接机制---三次握手信号的原理
- java中判断字符串是否为数字的方法的几种方法
- 关于文件 atime mtime gtime 专题
- [HDU 5754] Life Winner Bo (有平局的博弈+威佐夫博弈)
- php判断手机浏览还是web浏览,并执行相应的动作简单实例
- Spring4笔记----bean的作用范围
- CentOS下安装tar包/rpm包
- TCP套接字编程模型及实例
- 错误:手动SQL语句拼接时,注意空格
- 规范
- 【多线程】博客
- java线程安全总结