您的位置:首页 > 理论基础 > 数据结构算法

数据结构基础算法-堆

2017-09-17 20:29 232 查看
#include<stdio.h>

#include<stdlib.h>

void BigHeap(int a[],int n)

{//创建大根堆
int pa,end,tog,t;
end=n-1;
while(1)
{
tog=0;
pa=end/2;
while(pa>0)
{
if(a[pa]<a[2*pa])
{//跟左子树比
tog=1;
t=a[pa];
a[pa]=a[2*pa];
a[2*pa]=t;
}

    if(((2*pa+1)<=end)&&a[pa]<a[2*pa+1])
{//有右 跟右子树比
tog=1;
t=a[pa];
a[pa]=a[2*pa+1];
a[2*pa+1]=t;
}
pa--;
}
if(tog==0)
break;
}

}

void LittleHeap(int a[],int n)

{//创建小根堆
int pa,end,tog,t;
end=n-1;
while(1)
{
tog=0;
pa=end/2;
while(pa>0)
{
if(a[pa]>a[2*pa])
{//跟左子树比
tog=1;
t=a[pa];
a[pa]=a[2*pa];
a[2*pa]=t;
}

    if(((2*pa+1)<=end)&&a[pa]>a[2*pa+1])
{//有右 跟右子树比
tog=1;
t=a[pa];
a[pa]=a[2*pa+1];
a[2*pa+1]=t;
}
pa--;
}
if(tog==0)
break;
}

}

void HeapSort(int a[],int n)

{
int end=n-1,t;
while(end>1)
{
BigHeap(a,end);
t=a[1];
a[1]=a[end];
a[end]=t;
end--;
}

}

int main(void)

{
int i,a[100];
printf("请输入8个数:");
for(i=1;i<9;i++)
  scanf("%d",&a[i]);

BigHeap(a,9);
printf("输出大根堆:");
for(i=1;i<9;i++)
printf("%5d",a[i]);
printf("\n");

LittleHeap(a,9);
printf("输出小根堆:");
for(i=1;i<9;i++)
printf("%5d",a[i]);
printf("\n");

HeapSort(a,9);
printf("输出堆:");
for(i=1;i<9;i++)
printf("%5d",a[i]);
printf("\n");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: