堆排序
来源:互联网 发布:linux 查看 env变量 编辑:程序博客网 时间:2024/06/04 18:08
#include <stdio.h>
#define BOOL int
#define FALSE 0
#define TRUE 1
#define MAXSIZE 8
typedef int Type;
void swap(Type *a,Type *b)
{
Type t;
t=*a;
*a=*b;
*b=t;
}
void print(Type H[],int n)
{
int i;
for(i=0;i<=MAXSIZE;i++)
printf("%3d",H[i]);
}
void sift_down(Type H[],int n,int i)
{
BOOL done=FALSE;
if((2*i)<=n)
{
while(!done&&(i=2*i)<=n)
{
if(i+1<=n&&H[i+1]>H[i])
i=i+1;
if(H[i/2]<H[i])
swap(&H[i/2],&H[i]);
else done=TRUE;
}
}
}
void make_heap(Type H[],int n)
{
int i;
H[n]=H[0];
for(i=n/2;i>=1;i--)
sift_down(H,n,i);
}
void heap_sort(Type H[],int n)
{
int i;
make_heap(H,n);
printf("/n中间过程为:/n");
for(i=n;i>1;i--)
{
print(H,n);
printf("/n");
swap(&H[1],&H[i]);
sift_down(H,i-1,1);
}
}
void main()
{
int i;
Type H[MAXSIZE+1];
printf("请输入一个长度为%d的数组:/n",MAXSIZE);
for(i=0;i<MAXSIZE;i++)
scanf("%d",&H[i]);
heap_sort(H,MAXSIZE);
printf("/n经过堆排序后的数组为:/n");
print(H,MAXSIZE);
printf("/n/n");
}
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 在函数中 传递数组
- [转]简单CSS hack:区分IE6、IE7、IE8、Firefox、Opera
- 详解SOA五种基本架构模式(1)
- java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp区别和联系
- XHTML和HTML的区别
- 堆排序
- 详解SOA五种基本架构模式(2)
- java获取页面编码
- 一段可以运行的xhtml的jsp代码
- ISO语言代码(ISO-639)与国家代码(ISO-3166)
- OCP认证考试指南(18):配置数据库的备份与恢复(1)
- android 如何将imageCursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM_KEY)中的到的专辑封面放入view中显示
- 详解SOA五种基本架构模式(3)
- Android 任务、进程和线程