在含有 n 个元素的小顶堆中增加一个元素且调整为新的小顶堆。
算法:由于原来 n 个元素已经是堆,所以调整时仅需从 A[n+1]出发,走一条从叶子结点 A[n+1] 到根结点 A[1]的路径,将该结点与其父亲结点比较,若比父亲结点小,则与父亲 结点交换,再继续跟上一层父亲结点比较。直到根结点为止;若在某层,该结点比父 亲结点大,则算法结束,这时 A[1…n+1]个结点已经成为小顶堆。
void heapsort(datataye A[1..n],datatype x){
int i,j,n;
n++;
j=n;
while(j>1){
i=j/2;
if(A[i]<x) break;
else{
A[j]=A[i];
j=i;
}
}
A[j]=x;
}