您的位置:首页 > 其它

关于堆排序的了解和实现

2015-06-30 01:09 363 查看
//编写文件: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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: