資料結構 篩選法建堆

2021-08-01 19:24:30 字數 552 閱讀 2414

首先將n個資料元素存入乙個一維陣列,並把這個陣列視作一棵完全二叉樹。

從二叉樹的最後乙個非葉結點開始用從上向下過濾的方法調整以該非葉結點為根節點的二叉樹為最大堆。

對前面的結點依次執行2的操作直到根結點執行完成為止。此時這棵二叉樹就調整為了乙個最大堆。

注:從上向下過濾是指從二叉樹的根結點開始,比較根結點和它的子結點,如果根結點比子結點中最大的那個小的話,就交換父節點和子結點的值,之後對以之前子結點為根節點的二叉樹重複執行上述操作。

**(非原創,侵刪)

下面是**實現

typedef struct heap* maxheap;

void buildmaxheap(maxheap h)

else

break;

}h->elements[parent] = temp;

}printf("%d\n",h->size);

}

資料結構 堆的常規操作(建堆,刪除,插入)

寫在前面 該篇文章 柳婼 資料結構 堆 堆排序筆記 堆的一些性質 堆是一棵完全二叉樹,樹的每個結點的值都不小於 或者不大於 其左右孩子的值。父親結點大於等於孩子結點的值叫做大頂堆,反之叫做小頂堆 大頂堆的每個結點的值都是以它為根結點的子樹的最大值,反之最小值 下面都以大頂堆為例子 兩個兄弟之間不存在...

演算法與資料結構 篩選法求素數

簡單表示 isprime i 等於0表示i不是素數,否則等於1則表示i是素數。define max 5000005 long isprime max void initprime long i,j isprime 0 isprime 1 0 for i 2 i 附 求乙個數的質因子個數 比如6 2 ...

資料結構 堆

最大堆 最小堆 堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點...