堆中元素的排列方式分為兩種:max-heap或min-heap,前者每個節點的key都大於等於孩子節點的key,後者每個節點的key都小於等於孩子節點的key。
由於堆可以看成乙個完全二叉樹,可以使用連續空間的a來模擬完全二叉樹,簡單原始的實現如下:
#include
int heapsize=0;//全域性變數記錄堆的大小
void heapsort(int array,int n)
}//構建堆
void buildheap(int array,int n)
}//堆化
void heapify(int array,int n)
else
if(right_childarray[largest])
if(largest!=n)
}void e array,int i,int j)
int main();
heapsort(arr,9);
for(int i=0;i<9;++i);
std::vector vec(arr,arr+9);
//0 1 2 3 4 8 9 3 5
for(auto c:vec){
std::cout<
本文標題: c++堆排序演算法例項詳解
本文位址:
排序演算法 詳解堆排序演算法
1 原理 堆排序是一種選擇排序,通過實現大小堆,來取出堆頂的資料,然後和最後乙個交換,然後將堆的大小減一,迴圈這個過程直到,只有乙個資料時停止。公升序建大堆,降序建小堆。2 問題 很多人會疑惑為什麼要交換之後再減小堆的大小呢?難道不交換就不能篩選出我們要的極值嗎?首先向下調整演算法的時間複雜度為o ...
堆排序演算法詳解
最大堆 每乙個結點都比其子結點大的二叉樹。堆排序思想 把所有資料建成乙個最大堆,不停的把堆頂的元素取出來依次排列,取乙個數之後,剩下的數要維持最大堆結構 那麼堆排序主要分為 建成最大堆 維持堆結構 建最大堆 時間複雜度為o n 注意 在使用陣列表示的堆結構中,結點arr index 的父結點為arr...
C 選擇排序演算法例項詳解
基本思想 每一趟從無序區中選出最小的元素,順序放在有序區的最後,直到全部元素排序完畢。由於選擇排序每一趟總是從無序區中選出全域性最小 或最大 的元素,所以適用於從大量元速度中選擇一部分排序元素。例如,從10000個元素中選出最小的前10位元素。直接選擇排序 1.排序思路 從第i趟開始,從當前無序區a...