十大排序算法----堆排序(最後一個非葉子節點的序號是n/2-1的推理)

堆排序(最後一個非葉子節點的序號是n/2-1的推理)

可以分兩種情形考慮:

1.堆的最後一個非葉子節點若只有左子節點
2.堆的最後一個非葉子節點有左右兩個子節點

堆的定義:
大頂堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]
小頂堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]

完全二叉樹的性質之一是:如果節點序號爲i,在它的左子節點序號爲2i+1,右子節點序號爲2i+2。

對於第一種情形:左子節點的序號爲n-1,則n-1=2*i+1,推出i=n/2-1;

對於第二種情形:左子節點的序號爲n-2,在n-2=2i+1,推出i=(n-1)/2-1;右子節點的序號爲n-1,則n-1=2i+2,推出i=(n-1)/2-1;

很顯然,當完全二叉樹最後一個節點是其父節點的左子節點時,樹的節點數爲偶數;當完全二叉樹最後一個節點是其父節點的右子節點時,樹的節點數爲奇數。

根據語法的特徵,/ 符號取整,則若n爲奇數時(n-1)/2-1=n/2-1。

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