A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 瑞雪雄起 中级黑马   /  2015-9-27 04:29  /  207 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include<stdio.h>
#include<math.h>
void buildMaxHeap(int a[],int n,bool flag)
{
int N=n+1;
int h=(int)ceil((log(N)/log(2)))-1;
for(int i=1;i<=h;i++)
{
for(int j=1;j<=n/2;j++)
{
int t=2*j;
if(t+1<=n)
{
if(a[t]<a[t+1]) t++;
if(a[j]<a[t])
{
int temp=a[j];
a[j]=a[t];
a[t]=temp;
}
}
else if(t+1>n)
{
if(a[j]<a[t])
{
int temp=a[j];
a[j]=a[t];
a[t]=temp;
}
}
}
if(flag==false)  break;
}
}
void HeapSort(int a[],int n)
{
int N=n;
buildMaxHeap(a,N,true);
int temp;
for(int i=n;i>=2;i--)
{
temp=a[1];
a[1]=a[i];
a[i]=temp;
buildMaxHeap(a,--N,false);
}
}
void main()
{
        int a[11]={0,6,8,7,9,0,1,3,2,4,5};
        HeapSort(a,10);
    for(int i=1;i<=10;i++)
        {
        printf("%d  ",a[i]);
        }
   }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马