堆排序

篩選:

前提是:一個小堆(或稱爲完全二叉樹),除根節點以外,它的左右子樹都已經是一個堆,現在要做的是:通過對根節點的調整,使得整個二叉樹稱爲一個堆,而這一過程,我們稱之爲:篩選!

建堆:

從一個無序序列建成一個堆的過程,其實質就是一個不斷篩選的過程。

具體來說:要能執行篩選操作,就必須滿足篩選對於二叉樹的結構的要求,而對於只有兩個或三個結點的二叉樹是天然滿足這一條件的,所以,我們可以從下而上,從最小的二叉樹開始,使其稱爲堆,然後,這些小堆將作爲更大的二叉樹的左右子樹,繼續能夠滿足篩選操作對二叉樹的要求,從而繼續建立更大的堆,直至整顆二叉樹的根節點,從而最終完成堆的建立

排序:

排序操作會造成對堆的結構的破環,即:每次輸出一個已排序的結點後,使得原來的二叉樹不再是堆,但是這種結構卻滿足篩選操作對二叉樹的要求,所以,在每輸出一個排序好的結點後,需要進行一次篩選操作,使得剩下的二叉樹繼續是一個堆,這樣,我們就能夠通過輸出堆頂的元素來得到下一個排序好的結點。反覆進行這種輸出-篩選的操作,就能夠完成整個排序過程。

所以,實質上,堆排序的過程中主要的操作就是每一次的篩選。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章