最大优先队列是基于最大堆实现的。增加优先级的原理如下:
对于给定元素中下标要增加优先级,先将要增加的优先级的值赋给该下标的值,然后从该点开始,与其父节点相比较,直到找到合适的位置或者到根节点。代码如下:
void Insert:: HeapIncreseKey(int A[],int value,int key)
{
if(key<A[value])
{
cout<<"this key is lower than themself!";
return;
}
A[value]=key;
while(value>0 && A[value/2] < A[value])//父节点<子节点
{
int temp=0;
temp=A[value/2];
A[value/2]=A[value];
A[value]=temp;
value/=2;//value始终位子节点
}
}
key为要增加的优先级,i为该下标。因为最坏的情况是比较到根节点,对于输入的n到根节点有lgn层,所以,时间复杂度为O(lgn).在比较的过程中,父节点和子节点一直在变。