数据结构基础算法-堆
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;
}
#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;
}
相关文章推荐
- 笔试、面试重点总结:算法基础、数据结构
- Uva 算法入门经典(数据结构基础)线性表题目
- 基础数据结构与算法之非比较排序一:计数排序
- Mysql数据库索引原理--数据结构及算法基础
- 在emacs中用gdb调试学习算法与数据结构基础(1)_猜价格游戏
- 数据结构与算法基础1
- 数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串
- 笔试、面试重点总结:算法基础、数据结构
- 数据结构基础 算法复杂度分析(一) 概念篇
- 【复习】软件设计师之数据结构与算法基础
- 学点PYTHON基础的东东--数据结构,算法,设计模式---观察者模式
- 算法竞赛入门经典:第六章 数据结构基础 6.5小球下落
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2
- .net 数据结构与算法基础:泛型编程、时间测试
- .net 数据结构与算法基础:泛型链表使用
- 算法与数据结构基础知识
- 笔试、面试重点总结:算法基础、数据结构
- 数据结构基础算法整理归纳:冒泡排序(二)
- 数据结构基础算法整理归纳:选择排序(四)
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2