算法如下:
typedef struct{
KeyType key;
InfoType otherinfo;
}RecType;
typedef struct{
RecType Rec[MaxNum]; //MaxNum是一个常量
int len;
}SeqList;
HeapInsert(SeqList R, KeyType key){
int i,j;
R.Rec[++R.len].key=key; //增加新值到原堆中已有元素的尾部且堆的长度加1
i=R.len/2; j=R.len;
while(i>0){ //调整为堆
if(R.Rec[i].key<R.Rec[j].key){
R.Rec[0]=R.Rec[i]; R.Rec[i]=R.Rec[j]; R.Rec[i]=R.Rec[0];
}
j=i; i=i/2; //继续自底向上查找
}
}
设该堆对应的树高为h,则满足h≤log2R.len,调整是自底向上查找,最多查找到树根,所以时间复杂度为O(log2R.len)。