QMHTMY / RustBook

A book about Rust Data Structures and Algorithms.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

堆排序计算父节点下标宏不正确

nemoTyrant opened this issue · comments

131页开头的
macro_rules! parent { ($child:ident) => { $child >> 1 }; }
应当修改为
macro_rules! parent { ($child:ident) => { ($child-1) >> 1 }; }

129页讲解堆排序时下标从1开始,所以左右子节点分别是2n和2n+1,父节点为子节点除以2。131页的代码是以下标0开始,所以左右子节点分别是2n+1和2n+2,父节点应当为子节点减一后除以2,否则右子节点计算得到的是n+1而非n。
书中代码可以正常运行,是因为parent宏只在初始化时使用以减少move_down的次数,即使计算错误多执行一次也不影响正确性。

多谢,已修改成下标从 1 开始。