代码:
#include<iostream>
using namespace std;
#define MAXSIZE 20//顺序表的最大长度
typedef int KeyType;//定义关键字类型为整型
typedef int InfoType;
typedef struct
{
KeyType key;//关键字项
InfoType otherinfo;//其他数据项
}RedType;
typedef struct
{
RedType r[MAXSIZE+1];//r[0]闲置或做哨兵单元
int length;//顺序表的长度
}SqList;//顺序表类型
void HeapAdjust(SqList &L,int s,int m)//假设r[s+1..m]已经是堆,将r[s..m]调整为以r[s]为艮的大根堆
{
RedType rc=L.r[s];
for(int j=2*s;j<=m;j*=2)//沿key较大的孩子结点向下筛选
{
if(j<m&&L.r[j].key<L.r[j+1].key)
++j;//j为key较大的记录的下标
if(rc.key>=L.r[j].key)//rc应插在位置s上
break;
L.r[s]=L.r[j];
s=j;
}//for
L.r[s]=rc;//插入
}
void Cr