最小堆怎麼建立

2021-07-05 08:39:45 字數 857 閱讀 2217

有乙個面試題,100w個數中找到最大的100個數。

解決方式是,用乙個100個容量的最小堆, 這100個數總數目前已知的最大的100個,而且

堆頂是小的, 在繼續遍歷時候,只和堆定比較, 如果這個數,比堆頂的大, 就把這個數加入

這個堆。

當遍歷完成後,這個最小堆中的數,就是最大的100個數了。

當理解了這個, 我還有乙個疑惑, 什麼是最小堆。

學習了這個篇帖子。 受益匪淺。 文章寫的很好, 一開始很難理解,跟著模擬了一下,

關鍵是要自己模擬程式,去移動一下 這個樹,才理解。

typedef struct heap heap;

struct heap ;

void insert(heap *h,int n)else

}h->arr[0] = n;

}void delete(heap *h)else

}}

下面這個是我自己改的,上面的是 wikipedia上copy的

#include 

typedef struct heap heap;

struct heap

;//將數字num 插入 最小堆

//游標 比 位置 小一

void insert(heap *h, int num)

else

}

h->arr[0] = num;

}void c_delete(heap *h)

if(h->arr[i] > h->arr[i+1])

i++;

else

}}int main()

最小堆建立

題目 實現最小堆兩個功能 1 增加乙個元素 2 輸出並刪除最小堆中的最小的數 輸入 第一行輸入乙個整數t,代表測試資料的組數。對於每組測試資料,第一行輸入乙個整數n,代表操作的次數。每次操作首先輸入乙個整數type。當type 1,增添操作,接著輸入乙個整數u,代表要插入的元素。當type 2,輸出...

用priority queue建立最小堆

標準庫里的priority queue預設建立的是最大堆,要建立最小堆的話,需要下面的形式。1 priority queue,greater minheap 最小堆2 priority queue,less maxheap 最大堆預設的就是最大堆,可以直接像下面那樣寫 priority queue ...

matlab建立最小堆演算法實現

最小堆是一顆完全二叉樹,他的每乙個節點的值不大於其左右子節點的值。leaf name a b c d e f g h leaf data 10,1,1,11,1,1,8,5 my heap heap my heap.min heap create leaf name,leaf data 函式定義如下...