学习了很多小顶堆的代码问题,很多都理解起来不顺畅!找到一个很容易记忆理解大代码实现,就是从第一个子节点开始遍历,与其父节点比较,如果比父节点大的情况下,就上浮到父节点,此时父节点继续上浮,只到根节点。
int parent(int n)
{
return (n-1)/2;
}
void buildHeap(int n , int data[])
{
for(int i= 1; i < n ; i++)
{
int t = i;
while( t != 0 && data[parent(t)] > data[t])
{
int temp = data[t];
data[t] = data[parent(t)];
data[parent(t)] = temp;
t = parent(t);
}
}
}
int main()
{
int data[6] = {4,3,7,1,8,5};
buildHeap(6,data);
}
具体构建过程可以看下图: