插入法建堆

2021-06-09 19:44:38 字數 520 閱讀 1072

插入法建堆是將陣列a中的元素逐個插入到陣列b中建立乙個堆。每插入乙個關鍵字就與其父節點的關鍵字比較大小,如果父節點的關鍵字較小則交換,然後依次自低地向上調整使之符合大(小)頂堆的特性。

插入法建堆與調整法建堆可能結果不一樣。調整法建堆是自底向上依次調整,一棵子樹中最大的節點值與根節點交換,最小的那個節點位置在本次調整中不作改變。

而插入法建堆結果與插入的順序和值大小有關。以大頂堆為例,在某棵已插入根節點的子樹中,當插入左節點時,左節點與根節點交換,插入右節點時,右節點與根節點交換,那麼這種情況下這顆子樹三個節點的位置都發生改變了。而調整法建堆有乙個節點位置不變,所以兩種方法建堆結果可能不一樣。

下面是插入法建堆的部分**。

void build_max_heap(int array1, int arraysize, int array2, int &heapsize)

{ //將array1中的元素逐個插入到array2中建堆 ,堆初始大小為0

int i=0;

for(i=0;i1&&array[i/2]

插入法排序

static void insertsort int nums 挪位置 for int k i 1 k index k 插入 nums index insert static void main string args console.writeline 排序前的陣列 foreach var n i...

插入法排序

插入法排序較為複雜,其基本工作原理是抽出乙個資料,在前面的資料中尋找相應的位置插入,直到完成排序。以數字9 6 15 4 2為例,採用插入法實現數字按從小到大進行排序,插入法排序過程如圖8.23所示。圖8.23 插入法排序過程示意圖 從圖8.23可以發現,在第一次排序過程中將第乙個數取出來,並放置在...

03插入法排序

插入法排序有個例子講的形象,比如玩撲克牌,插入排序可以用打牌時對摸起的牌根據牌的點數來對其進行插入排列來描述。可以把左手中的牌比做已經摸起的牌,即已經被排列好的牌,左手可以容納的牌數的空間可以假想為和要摸的牌的總數相同 而在桌子上的那部分沒摸的牌則是未被排序的牌,這二者的關係可以抽象為陣列中已經被排...