//编写文件:HEAPIFY.H
//编写日期:2015年6月30日
//版本号:1.0
#ifndef HEAPIFY
#define HEAPIFY 1
int parent(int i);
int left(int i);
int right(int i);
//实现最大堆
void max_heapify(int A[], int i);
void build_max_heap(int A[]);
void max_heapsort(int A[]);
//实现最小堆
void min_heapify(int A[], int i);
void build_min_heap(int A[]);
void min_heapsort(int A[]);
void move(int& a,int& b);
#endif
源码实现最大堆以及最小堆及排序
//编写文件:HEAPIFY.CPP
//编写日期:2015年6月30日
//版本号:1.0
#include"HEAPIFY.h"
int parent(int i)
{
return i/2;
}
int left(int i)
{
return 2*i;
}
int right(int i)
{
return 2*i+1;
}
void move(int& a,int& b){
int temp;
temp=a;
a=b;
b=temp;
}
//实现最大堆
void max_heapify(int A[], int i)
{
int l=left(i);
int r=right(i);
int lagest;
if(l<A[0]&&A[l]>A[i])
{
lagest=l;
}else{
lagest=i;
}
if(r<A[0]&&A[r]>A[lagest]){
lagest=r;
}
if(i!=lagest){
move(A[i],A[lagest]);
max_heapify(A,lagest);
}
}
void build_max_heap(int A[])
{
for(int i=A[0]/2;i>=1;i--){
max_heapify(A,i);
}
}
void max_heapsort(int A[])
{
build_max_heap(A);
for(int i=A[0];i>=2;i--)
{
move(A[i],A[1]);
A[0]--;
max_heapify(A,1);
}
}
//实现最小堆
void min_heapify(int A[], int i)
{
int l=left(i);
int r=right(i);
int lagest;
if(l<A[0]&&A[l]<A[i])
{
lagest=l;
}else{
lagest=i;
}
if(r<A[0]&&A[r]<A[lagest]){
lagest=r;
}
if(i!=lagest){
move(A[i],A[lagest]);
min_heapify(A,lagest);
}
}
void build_min_heap(int A[])
{
for(int i=A[0]/2;i>=1;i--){
min_heapify(A,i);
}
}
void min_heapsort(int A[])
{
build_min_heap(A);
for(int i=A[0];i>=2;i--)
{
move(A[i],A[1]);
A[0]--;
min_heapify(A,1);
}
}