參考此文的學習筆記
//不用交換,則已經是最大堆,不用迴圈了
else break; }}
void sort(int* a, int length)
//開始排序,排序是從上到下從左到右的調整
for (int j = length - 1; j > 0; j--) }
int main()
sort(a, length);
for (int i = 0; i < length; i++)
delete a;
return 0;
}
堆排序學習筆記
堆排序 利用帶大頂堆的特點 從小到大時 按照從右向左 從下自上的順序將所有的非葉子節點都調整成以當前非葉子節點為根的大頂堆,這樣遍歷完成之後,整棵樹就變成了乙個大頂堆,最大的元素在根節點上,這時將這個最大的元素和最後乙個位置上的元素進行交換,這樣最大值就跑到了最後,這樣操作之後,由於整棵樹原本就是大...
學習筆記 堆排序
堆排序運用到了樹的思想。它仍然使用陣列排序,並不建立樹,但是排序時將陣列看作乙個完全二叉樹,通過不斷地構建大頂堆,將樹頂元素與樹尾元素交換,以樹頂構建新的大頂堆來把整個陣列從小到大排序。首先,將數字按從上到下,從左到右的順序寫成一顆完全二叉樹,這樣的樹的特點是,對於父節點i 對應陣列中的下標i 它的...
筆記 堆排序
堆排序只需要記錄乙個記錄大小的輔助空間,每個待排序的記錄僅占有乙個儲存空間。堆的定義 n個元素的序列 當且僅當滿足如下關係時,稱之為堆。ki k2ik i k2 i 1 或 ki k 2iki k2i 1 i 1,2,3,n 2 若將和此序列對應的一維陣列看成是乙個完全二叉樹,則堆的含義表明,完全二...