1將陣列初始化為大根堆
2從i=length-1(length是陣列長度)開始迴圈直到i=0將a[0]和陣列的最後乙個元素數值交換,使陣列最後乙個元素成為最大值,次大,第三大....依次類推
3在步驟2每次第乙個元素和最後乙個元素交換值的時候,會破壞堆的結構,所以還要加多調整堆結構這一步驟。
調整堆**
void swap(int & a,int &b)//交換值
//調整堆
void adjust(int a,int index, int length)
return ;
}
//堆排序**
void heap_sort(int a, int length)
for(int i=length-1;i>=0;i--)
return ;
}
堆排序(公升序)
1 思想 堆即是一棵完全二叉樹。堆排序的核心是堆調整演算法。首先根據初始輸入資料,利用堆調整演算法shiftdown 形成最大堆 然後,將堆頂元素與堆尾元素交換,縮小堆的範圍並重新調整為最大堆,如此往復。堆排序是一種不穩定的排序演算法。2 堆調整過程 將初始堆調整為最大堆 最大堆定義 每個節點的值都...
堆排序(公升序,降序,迭代,遞迴寫法)
是一種選擇排序。平均時間複雜度為0 nlogn 是不穩定排序 大頂堆 完全二叉樹,每個節點的值都大於或等於其左右子節點的值。左右子節點的值不作要求 小頂堆 完全二叉樹,每個節點的值都小於或等於其左右子節點的值 將待排序序列構造層乙個大頂堆 左節點2n 1 右節點2n 2 父節點 i 1 2 序列的最...
堆排序 堆排序優化 索引堆排序
堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...