《演算法筆記》堆

2021-10-05 03:57:52 字數 1657 閱讀 5878

堆的常用操作(新建堆,插入元素,刪除堆頂)

理論:

1、downadjust(low,high)的作用是調整這個閉區間範圍內的元素,使其滿足堆的性質;呼叫此函式的前提是除了low之外,其他節點滿足堆的性質;

2、createheap()在建堆時是倒著從第乙個非葉節點元素開始呼叫downadjust();

3、deleteheap()是將最後乙個元素與第乙個元素交換,這樣現在除了根節點外,其他節點都是堆,呼叫一次downadjust()就可以了;

4、upadjust(low,high)是在除了high元素外,其他節點都滿足堆的性質,逐次向上調整為堆;

4、insertheap(data)是在最後加乙個元素,然後向上調整;

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

100;

int heap[maxn]

, n;

//對heap陣列在[low, high]範圍內進行向下調整,

//low為待調整元素的下標,high一般為堆最後乙個元素的下標

void

downadjust

(int low,

int high)

else}}

//完全二叉樹的性質:葉子結點的個數為 n/2 向上取整,非葉子節點有 n/2 向下取整個

void

createheap()

}//刪除堆頂元素

void

deletetop()

//向上調整元素

void

upadjust

(int low,

int high)

else

break;}

}void

insertheap

(int data)

intmain()

createheap()

;for

(int i =

1; i <= n; i++

)printf

("\n");

deletetop()

;for

(int i =

1; i <= n; i++

)printf

("\n");

insertheap(50

);for(

int i =

1; i <= n; i++

)printf

("\n");

system

("pause");

return0;

}

堆排序
理論:

1、簡單思路是每次取出第乙個元素並刪除,將最後乙個元素放到第一位,並呼叫downadjust()向下調整;

2、好的方法是倒著列舉,交換最後一位與第一位,這樣最後一位就是最大值;

但是第一位元素不符合堆的性質,只要呼叫downadjust()向下調整一次就可以了;最後陣列是從小到大排序;

void

heapsort()

}

演算法筆記 堆

堆是一種特殊的樹形資料結構,一般討論的堆都是二叉堆。堆的特點是根結點的值是所有結點中最小的或者最大的,並且根結點的兩個子樹也是乙個堆結構。堆是一種比較特殊的資料結構,可以被看做一棵樹的陣列物件,具有以下的性質 堆中某個節點的值總是不大於或不小於其父節點的值 堆總是一棵完全二叉樹。將根節點最大的堆叫做...

演算法 之 堆 建立堆

給出乙個有n個元素的陣列a 1.n 要建立乙個包含這些元素的堆,可以這樣進行 從空的堆開始,不斷插入每乙個元素,直到a完全被轉移到堆中為止。因為插入第j個鍵值用時o log j 因此用這種方法建立堆疊的時間複雜性是o n log n 我們知道對應於堆h 1.n 的樹的節點可以方便地以自頂向下 從左到...

演算法筆記 資料結構 堆

堆是一棵完全二叉樹,樹中每個結點的值都不小於 或者不大於 其左右孩子結點的值 對於給定初始序列,如何建堆?給定陣列 85,55,82,57,68,92,99,98,66,56 建堆過程如下 利用陣列來儲存完全二叉樹,這樣結點就按層序儲存與陣列中,其中第乙個結點將儲存於陣列的1號位,並且陣列i號位表示...