https://www.jianshu.com/p/6b526aa481b1
堆的高度是3,所以它有4层:最多是2^4-1=15个元素;
shiftUp()
:位置上升;shiftDown()
: 位置下移
insert(value)
:之后shiftUp()位置上升
;
remove()
: 移除跟位置;之后位置上升;shiftDown
该位置下降?
removeAtIndex(index)
: 与子节点比较位置无序时使用 shiftDown()
,如果与父节点比较发现无序则使用 shiftUp()
。
也就是下移或者上移位
replace(index, value)
:
堆排序:堆就是一个数组,可以使用它独特的属性将数组从低到高排序。时间复杂度:O(n lg n)。
插入元素的图
删除根节点;因为这就是堆的设计用途。
删除任意节点,删除7
10,7, 2, 5, 1;将删除的元素和最后一个元素交换:[ 10, 1, 2, 5, 7 ];removeLast()
来将最后一个元素删除;
[ 10, 1, 2, 5];1 比它的子节点小,所以需要 shiftDown()
来修复,即1和5交换。[ 10, 5, 2, 1];
从下面的堆中删除 (5)
会发生什么:https://github.com/raywenderlich/swift-algorithm-club/tree/master/Heap
5,和8 交换,删除5;之后8 shiftUp()
. 10 8 9 7 1 2 完毕;
查找 1 ;线型查找:10 7 2 5 1 ;如果父节点已经小于要寻找的值,则可以忽略那些子节点(及其子节点,依此类推...)。
如果查找8 : 10 下找,7及其以下不在找,2也不在找;