大数据下沉 l(left), r(right)
(&mut self, mut c: usize)
| 123 | |
| 124 | // 大数据下沉 l(left), r(right) |
| 125 | fn move_down(&mut self, mut c: usize) { |
| 126 | loop { |
| 127 | // 计算当前节点的左子节点位置 |
| 128 | let lc = left_child!(c); |
| 129 | if lc > self.size { break; } |
| 130 | |
| 131 | // 计算当前节点最小子节点位置 |
| 132 | let mc = self.min_child(c); |
| 133 | |
| 134 | // 当前节点数据大于最小子节点数据,交换 |
| 135 | if self.data[c] > self.data[mc] { |
| 136 | self.data.swap(c, mc); |
| 137 | } |
| 138 | |
| 139 | // 最小子节点成为当前节点 |
| 140 | c = mc; |
| 141 | } |
| 142 | } |
| 143 | |
| 144 | // 计算最小子节点位置 |
| 145 | fn min_child(&self, c: usize) -> usize { |