九 堆和優先佇列 4 堆排序

2021-07-11 12:26:35 字數 770 閱讀 3520

/*堆排序

*堆排序是一種高效重要的排序方法。它的時間複雜度可以達到o(nlogn)。

*原理:首先我們得到乙個大根堆, 然後從堆的最後乙個元素開始,依次往前遍歷,每次首先將堆頂元素和當前元素進行交換,交換後再對新的堆頂做乙個自上而下的堆調整。

*/#include

using namespace std;

class heap

~heap()

void push(int value)

size++;

}void output()

cout << endl;

}int top()

void update(int pos, int n)

if (rchild < n && data[rchild] > data[max_value])

if (max_value != pos)

}void pop()

void heap_sort() }};

int main() ;

heap heap(100);

for (int i = 0; i < 10; i++)

heap.output();

cout << heap.top() << endl;

heap.pop();

heap.output();

heap.heap_sort();

heap.output();

return 0;

}

堆 優先佇列 堆排序

堆就是在二叉樹上滿足每乙個根節點都大於兩個子節點的資料結構。堆常用來解決兩個問題,堆排序和優先佇列。堆的核心在於如何維護,通過比較來進行遞迴維護。相比於佇列加二分插入的實現,堆可以基於已經有的結果在最長lgn的時間內實現,通常比較到無需換位即可,而二分插入往往都要lgn,define maxn 10...

排序 4 堆排序

將待排序的序列構成乙個大頂堆。此時,序列的最大值就是堆頂的根結點。將它移走 就是,將其與堆陣列的末尾元素交換,此時末尾的元素就是最大值 然後將剩餘的n 1個序列重新構成乙個堆,如此反覆。其中關鍵問題 1 如何將無序序列構成乙個堆 2 輸出堆頂元素後,如何調整公升序元素為乙個堆 4.堆排序 堆調整 v...

排序(4) 堆排序

堆排序 把堆頂元素不斷的和末尾元素互換,互換後使得末尾元素為n 1,再從堆頂元素往下濾,使之保持堆的性質即可。includeusing namespace std typedef struct heap heap void percolatedown heap h,int hole heap bui...