資料結構中的堆

2022-07-15 18:06:07 字數 2380 閱讀 3241

堆排序(heapsort)是指利用堆積樹(堆)這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個節點的值都不大於其父節點的值,即a[parent[i]] >= a[i]。在陣列的非降序排序中,需要使用的就是大根堆,因為根據大根堆的要求可知,最大的值一定在堆頂。下面附上簡單c#簡單實現:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

heap

private

static

void realsort(t originarr) where

t : icomparable

}//////

1.首先是需要清楚 getmaxobjinheap方法的作用,是在乙個堆上插入乙個值,並保證插入後堆的性質不變

///2.堆其實是滿足完全二叉樹的性質的,也就是 葉子節點 = (總結點+1)/2 或者 總結點 / 2

///3.把每個葉子節點看做乙個獨立的最大堆,自底而上構建最大堆

/// private

static

void buildmaxheap(t originarr) where

t : icomparable

}//////

堆操作中核心方法,並維護最大堆的性質

///假設originlist是乙個最大堆,實現在堆固定位置插入元素,並同時保證最大堆的性質

/// private

static

void maxheapify(t originlist, int heapsie, int pos) where

t : icomparable

if (originlist[pos].compareto(originlist[largest]) >= 0

)

else}}

//////

陣列中兩個元素交換

/// private

static

void swap(t originlist, int posfirst, int possec) where

t : icomparable

public

static

void printarr(t arr)

console.writeline(

"");

console.writeline(

"***************===");}}

}

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

heap

public priorityqueueadd(t t)

else

return

this

; }

public

t pop()

//////

堆操作中核心方法,並維護最大堆的性質

///假設originlist是乙個最大堆,實現在堆固定位置插入元素,並同時保證最大堆的性質

/// private

void maxheapify(listoriginlist, int heapsie, int

pos)

if (originlist[pos].compareto(originlist[largest]) >= 0

)

else}}

private

void heapincreasekey(t key, int pos, bool isinsert = false

)

}private

int parent(int

pos)

//////

陣列中兩個元素交換

/// private

void swap(listoriginlist, int posfirst, int

possec)

}}

資料結構中的堆

堆在邏輯上是一顆完全二叉樹,一般採用順序表儲存的方式。當然這裡的堆和記憶體中的堆毫無關係,只不過是名字恰好相同。其有大堆和小堆之分 一 大堆 任一結點資訊均大於等於它左右孩子的資訊,位於堆頂結點的資訊最大,從根節點到每個結點路徑 上陣列元素組成的序列都是遞增的。二 小堆 任一結點資訊均小於等於它左右...

資料結構 堆中的路徑

7 9 堆中的路徑 25 分 將一系列給定數字插入乙個初始為空的小頂堆h。隨後對任意給定的下標i,列印從h i 到根結點的路徑。每組測試第1行包含2個正整數n和m 1000 分別是插入元素的個數 以及需要列印的路徑條數。下一行給出區間 10000,10000 內的n個要被插入乙個初始為空的小頂堆的整...

資料結構 堆

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