堆排列
来源:互联网 发布:gta5捏脸数据女爱丽丝 编辑:程序博客网 时间:2024/05/22 11:45
#include<stdio.h>
{
int t;
t=h[x];
h[x]=h[y];
h[y]=t;
{
int t;
int flag=0;
while(i*2<=n&&flag==0)
{
if(h[i*2]<h[i])
t=2*i;
else
t=i;
if(i*2+1<=n)
{
if(h[i*2+1]<h[t])
t=i*2+1;
}
if(t!=i)
{
swap(t,i);
i=t;
}
else
flag=1;
}
{
int i;
for(i=n/2;i>=1;i--)
{
softdown(i);
}
}
删除最小的数
int deletemin()
{
int t;
t=h[1];
h[1]=h[n];
n--;
softdown(1);
return t;
}
int main()
{
int i,num;
scanf("%d",&num);
for(i=1;i<=num;i++)
{
scanf("%d",&h[i]);
}
n=num;//注意全局变量n的用法
creat();
for(i=1;i<=num;i++)
{
printf("%d",deletemin());
}
return 0;
}
int h[101],n;
交换函数
void swap(int x,int y){
int t;
t=h[x];
h[x]=h[y];
h[y]=t;
}
向下调整函数
void softdown(int i){
int t;
int flag=0;
while(i*2<=n&&flag==0)
{
if(h[i*2]<h[i])
t=2*i;
else
t=i;
if(i*2+1<=n)
{
if(h[i*2+1]<h[t])
t=i*2+1;
}
if(t!=i)
{
swap(t,i);
i=t;
}
else
flag=1;
}
}
建立堆的函数
void creat(){
int i;
for(i=n/2;i>=1;i--)
{
softdown(i);
}
}
删除最小的数
int deletemin()
{
int t;
t=h[1];
h[1]=h[n];
n--;
softdown(1);
return t;
}
int main()
{
int i,num;
scanf("%d",&num);
for(i=1;i<=num;i++)
{
scanf("%d",&h[i]);
}
n=num;//注意全局变量n的用法
creat();
for(i=1;i<=num;i++)
{
printf("%d",deletemin());
}
return 0;
}
0 0
- 堆排列
- 堆排列
- poj 2442 sequences(堆排列)
- 按照堆排序的方式原地进行升序排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- rand()&srand()
- tjut 5918
- Python中的变量
- cordova 插件的使用说明
- 【JZOJ4859】【NOIP2016提高A组集训第7场11.4】连锁店
- 堆排列
- 《OpenCV3.0 编程入门》书中3.1.9节图像的载入、显示与输出示例程序练习报异常问题
- 重建二叉树106. Construct Binary Tree from Inorder and Postorder Traversal
- 编写程序STUDENT *Create(STUDENT studs[],int n)。STUDENT是一个结构类型,包含姓名、成绩和指针域。studs数组中存储了n个STUDENT记录。create函
- 网易视频云郭再荣:打造一体化多场景的视频云平台
- 同一台服务器不同数据库表数据复制
- Cocos2d-Lua语法
- 奶牛集会
- POJ 1988 Cube Stacking(并查集+求距离+连通块中元素个数)