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