参照《数据结构》(C语言版)严蔚敏著
#include <iostream.h>
struct SqList
{
int r[100];
int length;
};
void HeapAjust(SqList &H, int s, int m);
void HeapSort(SqList &H);
int main(void)
{
SqList H;
H.r[1]=49;
H.r[2]=38;
H.r[3]=65;
H.r[4]=97;
H.r[5]=76;
H.r[6]=13;
H.r[7]=27;
H.r[8]=49;
H.length=8;
HeapSort(H);
cout << endl;
return 0;
}
void HeapAjust(SqList &H, int s, int m)
{//已知H.r[s..m]中记录的关键字除H.r[s]之外均满足堆定义
//本函数调整H.r[s]的关键字,使H.r[s..m]成为一个大顶堆
int rc=H.r[s];
for(int j=s*2;j<=m;j*=2)
{
if(j<m && H.r[j]<H.r[j+1])
{//找出当前结点的左右孩子结点中的较大者
j++;
}
//将当前结点与孩子结点中的较大者比较
if(rc>H.r[j])
{//当前结点比孩子结点都大,则满足堆定义,则不再调整
break;
}
else
{//继续调整该结点
H.r[s]=H.r[j];
s=j;
}
}
H.r[s]=rc;
}
void HeapSort(SqList &H)
{
int