#include<iostream>
using namespace std;
//大根堆,从小到达排序
int a[];
void swap(int &a,int &b)
{
a=a^b;
b=a^b;
a=a^b; }
void adjust(int *a,int root,int len)
{
int max=root;
int left=*root;
int right=*root+;
if(left<=len&&a[max]<a[left])
{
max=left; } if(right<=len&&a[max]<a[right])
{
max=right; }
if(max!=root)
{
swap(a[max],a[root]); adjust(a,max,len); } }
void bulidHeap(int *a,int len)
{ for(int i=len/;i>=;i--)
{
adjust(a,i,len); } } void heapSort(int *a,int len)
{
if(len>)
{
swap(a[],a[len]);
adjust(a,,len-);//调整为堆
heapSort(a,len-); } }
void output(int *a,int len)
{
for(int i=;i<=len;i++)
{
cout<<a[i]<<" "; }
cout<<endl; } int main()
{ while(!cin.eof())
{
int len;
cin>>len;
for(int i=;i<=len;i++)
{
cin>>a[i];
} bulidHeap(a,len); heapSort(a,len);
output(a,len); } return ; }
 //一个大根堆的例子
//author:张小二
public class HeapSort {
public static void swap(int a[],int i,int j)
{ int temp=a[i];
a[i]=a[j];
a[j]=temp; }
//最重要的自上而下调整的方法。,最多的代码在此处,建队和堆排序都是靠他。
public static void adjust(int a[],int i,int len)//调整以i为根
{ while(true)
{
int largest=i;//寻找 i,2i+1,2i+2中的最大值
int r=2*i;
int l=2*i+1;
if(r<len&&a[r]>a[largest]) largest=r;
if(l<len&&a[l]>a[largest]) largest=l;
if(largest==i) break; swap(a,i,largest);
i=largest; } }
//建立堆,从最后一个非叶子开始
public static void bulid(int a[],int len)
{
display(a);
len=len-1;
for(int i=len/2;i>=0;i--)
{
adjust(a,i,len); } }
//堆排序
public static void heapSort(int a[])
{
bulid(a,a.length); int len=a.length-1;
while(len<1)
{
swap(a,0,len);
adjust(a,0,len);
len--; }
//after
display(a);
} public static void display(int a[])
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.println(); } /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={3,-3,5,6,-7,9,45};
heapSort(a); } }

 

最新文章

  1. python中协程
  2. IBM WebSphere MQ的oracle的jdbc
  3. T-SQL优化
  4. MFC 动态修改对话框标题
  5. 累积进度图及本周PSP饼状图
  6. HTTP 初步知识总结
  7. SQL 基础语法(创建表空间、用户、并授予权限、数据的增删改查) --(学习笔记)[转]
  8. [转]bit与byte
  9. UICollectionView [NSIndexPath section]: message sent to deallocated instance
  10. JavaScript 兼容处理IE67之 !&quot;a&quot;[0]
  11. FeatureClass Copy
  12. 怎样在SharePoint管理中心检查数据库架构版本号、修补级别和修补程序的常规监控
  13. 最新升级的火狐38.0.6识别ajax调用返回的&quot;&quot;空值可能有异常。
  14. 深入Web请求过程
  15. 超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)。
  16. Bootstrap3 排版-缩略语
  17. java.lang.StackOverflowError
  18. supervisord的安装使用
  19. String,StringBuffer,StringBuilder的区别与共同点
  20. 客户端优化之使用javascript原生方法替代复杂的数学运算和jquery方法

热门文章

  1. JAVA技术体系发展路线
  2. 【JPA】两种不同的实现jpa的配置方法
  3. 在树莓派上部署asp.net
  4. unity3d游戏开发(一)——圈圈叉叉
  5. ZOJ 3471 压缩状态DP
  6. 解析Android消息处理机制:Handler/Thread/Looper &amp; MessageQueue
  7. PHP漏洞全解(七)-Session劫持
  8. Nagios 邮箱告警的方式太OUT了!
  9. android 点滴记录 ICCID IMSI IMEI MEID 关系 和 区别,相关参数在什么情况下可以获取...
  10. ASP.NET在主题中添加CSS文件