设关键字序列(k1,k2....kn-1)是堆,设计将(k1,k2....kn-1,x)调整为堆
void adjustheap(int r[], int n){
int j=n,i=j/2,temp=r[j-1];
//n为插入的元素,定义i为j的父节点,定义temp变量为该插入的节点,由于数组下标从0开始,因此temp=r[i-1]
while(i>=1)//存在父节点时
if(temp>=r[i-1]) break;//如果插入元素大于父节点 那么退出循环(此堆为小根堆)
else{ //元素小于父节点时 进行如下操作
r[j-1]=r[i-1];j=i;i=i/2;//这里是利用temp进行父子交换,不过还需注意此时将父子节点都上移
r[j-1]=temp;
}
}