300 {
301 Iterator root = start;
302
303 while (root - first <= (
end - first - 2) / 2) {
304 Iterator child = first + 2 * (root - first) + 1;
305 Iterator swap_iter = root;
306
307 if (comp(*swap_iter, *child)) {
308 swap_iter = child;
309 }
310
311 if (child + 1 <=
end && comp(*swap_iter, *(child + 1))) {
312 swap_iter = child + 1;
313 }
314
315 if (swap_iter == root) {
316 return;
317 } else {
318 swap(*root, *swap_iter);
319 root = swap_iter;
320 }
321 }
322}
void swap(array< T, N > &lhs, array< T, N > &rhs) noexcept(noexcept(lhs.swap(rhs)))
constexpr T * end(T(&array)[N]) noexcept