#include<iostream>
using namespace std;
#define parent(i) (i/2)
#define left(i) (2*i)
#define right(i) (2*i+1)
//定义一个交换值的函数
void swap(int &a,int &b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
//下面定义一个维护最大堆的函数
void max_heap(int *A,int i,int heap_size)
{
int l=left(i);
int r=right(i);
int largest=i;
if(A[i]<A[l]&&l<=heap_size)
{
largest=l;
}
if(A[largest]<A[r]&&r<=heap_size)
{
largest=r;
}
if(largest!=i)
{
swap(A[i],A[largest]);
max_heap(A,largest,heap_size);
}
}
//下面定义一个构建最大堆的函数
void build_max_heap(int *A,int length)
{
int a=length/2;
for(a;a>=1;--a)
{
max_heap(A,a,length);
}
}
//下面定义一个堆排序算法
void heap_sort(int *A,int length)
{ int heap_size=length;
build_max_heap(A,length);
for(int i=length;i>=2;--i)
{swap(A[1],A[i]);
--heap_size;
max_heap(A,1,heap_size);
}
}
int main()
{
int a[11]={-10000,10,9,8,7,6,5,4,3,2,1};
int length=10;
heap_sort(a,10);
for(int i=1;i<11;++i)
cout<<a[i]<<" ";
cout<<endl;
system("pause");
return 0;
}
算法导论第6章实现堆排序的完整程序
最新推荐文章于 2022-05-24 15:18:22 发布