133 while (level_index > 0) {
134 size_t prev_heap = current_heap -
leonardo(levels[level_index]);
135 if (*(first + current_heap) < *(first + prev_heap)) {
136 if (levels[level_index] > 1) {
137 child_heap1 = current_heap - 1 -
leonardo(levels[level_index] - 2);
138 child_heap2 = current_heap - 1;
139 if (*(first + prev_heap) < *(first + child_heap1)) {
142 if (*(first + prev_heap) < *(first + child_heap2)) {
146 _NEFORCE
iter_swap(first + current_heap, first + prev_heap);
147 current_heap = prev_heap;
153 int current_level = levels[level_index];
154 while (current_level > 1) {
155 size_t max_child = current_heap;
156 child_heap1 = current_heap - 1 -
leonardo(current_level - 2);
157 child_heap2 = current_heap - 1;
159 if (*(first + max_child) < *(first + child_heap1)) {
160 max_child = child_heap1;
162 if (*(first + max_child) < *(first + child_heap2)) {
163 max_child = child_heap2;
166 if (max_child == child_heap1) {
167 _NEFORCE
iter_swap(first + current_heap, first + child_heap1);
168 current_heap = child_heap1;
170 }
else if (max_child == child_heap2) {
171 _NEFORCE
iter_swap(first + current_heap, first + child_heap2);
172 current_heap = child_heap2;
241 for (
size_t i = 1; i <
size; ++i) {
242 if (toplevel > 0 && levels[toplevel - 1] - levels[toplevel] == 1) {
245 }
else if (levels[toplevel] != 1) {
254 if (levels[toplevel] <= 1) {
283 for (
size_t i = 1; i <
size; ++i) {
284 if (toplevel > 0 && levels[toplevel - 1] - levels[toplevel] == 1) {
287 }
else if (levels[toplevel] != 1) {
296 for (
size_t i =
size - 2; i > 0; --i) {
297 if (levels[toplevel] <= 1) {