堆排序算法
来源:互联网 发布:imovie windows 编辑:程序博客网 时间:2024/06/12 00:20
void test::HeapAdjust(int *a,int i,int size)
{
int lchild = 2 * i;//i的左孩子节点
int rchild = 2 * i + 1;//右孩子节点
int max = i; //临时变量
if(i <= size/2)
{
if(lchild<=size&&a[lchild]>a[max])
{
max=lchild;
}
if(rchild<=size&&a[rchild]>a[max])
{
max=rchild;
}
if(max!=i)
{
swap(a[i],a[max]);
HeapAdjust(a,max,size);//避免调整后以max为节点的子树不是堆
}
}
}
void test::BuildHeap(int *a,int size)//建立堆
{
int i;
for(i = size/2;i>=1;i--)
{
HeapAdjust(a,i,size);
}
}
void test::HeapSort(int *a,int size)//堆排序
{
int i;
BuildHeap(a,size);
for(i=size;i>=1;i--)
{
swap(a[1],a[i]);
HeapAdjust(a,1,i-1);
}
}
{
int lchild = 2 * i;//i的左孩子节点
int rchild = 2 * i + 1;//右孩子节点
int max = i; //临时变量
if(i <= size/2)
{
if(lchild<=size&&a[lchild]>a[max])
{
max=lchild;
}
if(rchild<=size&&a[rchild]>a[max])
{
max=rchild;
}
if(max!=i)
{
swap(a[i],a[max]);
HeapAdjust(a,max,size);//避免调整后以max为节点的子树不是堆
}
}
}
void test::BuildHeap(int *a,int size)//建立堆
{
int i;
for(i = size/2;i>=1;i--)
{
HeapAdjust(a,i,size);
}
}
void test::HeapSort(int *a,int size)//堆排序
{
int i;
BuildHeap(a,size);
for(i=size;i>=1;i--)
{
swap(a[1],a[i]);
HeapAdjust(a,1,i-1);
}
}
0 0
- 排序算法--堆排序
- 排序算法-堆排序
- 排序算法---堆排序
- 【排序算法】堆排序
- 排序算法-堆排序
- 排序算法---堆排序
- 排序算法--堆排序
- 排序算法----堆排序
- 排序算法--堆排序
- 排序算法 堆排序
- 排序算法-堆排序
- 排序算法:堆排序
- 排序算法---堆排序
- 【排序算法】堆排序
- 排序算法:堆排序
- 排序算法-堆排序
- 排序算法:堆排序
- 排序算法-堆排序
- float 类型与“0值”比较
- 八数码总结
- springMVC
- centos7 配置开机自启redis
- 机房重构——七层登录
- 堆排序算法
- Docker常用命令
- spring基于注解实现定时任务
- Hadoop-2.7.1集群环境搭建步骤(一)
- LeetCode 2016 47,31
- Django基于类的编辑视图和Mixins
- 设计模式之建造者模式
- POJ 3038 How Many Answers Are Wrong(加权并查集)
- UIView、UIWindow和CALayer的理解