堆排序的實現

2021-07-07 06:30:19 字數 979 閱讀 4105

/**

* @file binaryheap.hpp

* @brief 二叉堆

* * @author xiao2 [email protected]

* @version 1.0

* @date 2015.11.17

*/#ifndef binaryheap_hpp_

#define binaryheap_hpp_

#include #include using namespace std;

/*** @brief 演算法

*/namespace algorithm

public:

/*** @brief 建立最小堆

* @param[in] current_size 當前堆大小

* @return void

*/ void buildheap(int current_size)

/*** @brief 堆排序

* @return void

*/ void heapsort() }

private:

/*** @brief 滲透下沉

* @param[in] current 當前下沉索引(索引從0開始)

* @param[in] current_size 當前下沉序列大小

* @return void

*/ void percolatedown(int current, int current_size)

else

} m_vecarray[parent] = temp; // 下沉初始值填充最後乙個替換節點

}private:

vector&m_vecarray; ///< 輸入vector陣列的引用(索引從0開始)

int m_isize; ///< vector陣列的大小};}

#endif // binaryheap_hpp_

堆排序的實現

堆排序是利用了一種資料結構叫做二叉堆,二叉堆是這樣定義的 二叉堆是一種特殊的堆,二叉堆是完全二元樹或者是近似完全二元樹,有最小堆和最大堆 特點 1 父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個結點的左子樹和右子樹都是乙個二叉堆 都是最大堆或最小堆 利用堆排序資料的儲存方式如...

堆排序的實現

要想用堆來實現排序,首先得構建乙個堆。將字串 sortexample 放入起始下標為1的陣列中,構成一顆二叉樹 構造堆時,從最後乙個非葉子節點出發。如上圖所示,最後乙個非葉子節點下標為n 2 5,可以觀察出任意乙個大小為n的二叉堆的最後乙個非葉子節點的標號都是n 2。從5開始一直到根節點1,一直進行...

堆排序的實現

前面在執行希爾排序,插入排序的時候,我是以下標為0開始儲存順序表結點,但是在堆排序的時候發現這樣的結構對於堆排序這樣頻繁使用下標的演算法來說比較麻煩,於是我將原來的 修改了一下,使其下標從1開始 下面是具體函式實現 include include include includeusing names...