<div dir="ltr">std::make_heap is currently implemented by iteratively applying a sift_up-type algorithm.<div>Since sift-up is O(ln n), this gives std::make_heap a worst case time complexity of O(n ln n).  Since the C++ standard mandates that std::make_heap make no more than O(3n) comparisons, this makes our std::make_heap out of spec.</div>
<div><br></div><div>Fix this by introducing an implementation of __sift_down and switch std::make_heap to create the heap using it.  This gives std::make_heap linear time complexity in the worst case.</div><div><br></div>
<div>This fixes PR20161.</div></div>