进行sink_down操作,操作完成之后再删除data_arr相应位置元素。最后将index_arr中值大于原index_arr头部元素值的减一。
来源:4-8 索引堆(Index Heap)
woshininengge
2019-12-27
索引堆再进行删除元素时候,老师讲的那种只交换索引列表的首尾元素然后删除末尾元素不够吧,假设索引堆原本的范围是1-6,而最大的元素的索引是4,把4删除了,索引列表里只有1,2,3,5,6。请问6已经超过索引的范围了!在删除元素时,我们原先是将data_arr中的首尾元素互换,再删除尾部元素,再对头部元素进行sink_down操作。现在我们先换索引数组中首尾元素,再删除索引数组尾部元素,此时尚未操作存放data的data_arr,因此索引数组剩余元素与data_arr的元素仍是一一对应的。进行sink_down操作,操作完成之后再删除data_arr相应位置元素。最后将index_arr中值大于原index_arr头部元素值的减一。
写回答
1回答
-
liuyubobobo
2019-12-27
这里的关键是,索引堆不是这么用的。索引堆中的索引不一定只是前 n 个元素。对一个空的索引堆,可以直接添加索引为 4 的元素。此时,这个索引堆中有一个元素,这个元素的索引是 4。1-3 和 5-6 索引的元素不存在。而不是添加的第一个元素,索引一定是 1。否则的话,就不需要这个索引了。
索引堆为什么这么设计?可以参考这个问答下我的回答:https://coding.imooc.com/learn/questiondetail/99784.html
继续加油!:)
022019-12-27
相似问题