diff --git a/TinySTL/Algorithm.h b/TinySTL/Algorithm.h index e2dd94f..deb34f2 100644 --- a/TinySTL/Algorithm.h +++ b/TinySTL/Algorithm.h @@ -73,19 +73,19 @@ namespace TinySTL{ } //********** [make_heap] *************** //********* [Algorithm Complexity: O(N)] **************** - template - //heap上溯算法 - static void up(RandomAccessIterator first, RandomAccessIterator last, Compare comp){//[first, last] - if (first != last){ - auto range = last - first + 1; - for (auto cur = last; rait > first; range /= 2){ - auto parent = first + (range / 2 - 1); - if (comp(*parent, *cur)) - TinySTL::swap(*parent, *cur); - cur = parent; - } - } - } + //template + ////heap上溯算法 + //static void up(RandomAccessIterator first, RandomAccessIterator last, Compare comp){//[first, last] + // if (first != last){ + // auto range = last - first + 1; + // for (auto cur = last; rait > first; range /= 2){ + // auto parent = first + (range / 2 - 1); + // if (comp(*parent, *cur)) + // TinySTL::swap(*parent, *cur); + // cur = parent; + // } + // } + //} template //heap下降算法 static void down(RandomAccessIterator first, RandomAccessIterator last, @@ -125,9 +125,16 @@ namespace TinySTL{ void push_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); //********* [pop_heap] *************** template - void pop_heap(RandomAccessIterator first, RandomAccessIterator last); + void pop_heap(RandomAccessIterator first, RandomAccessIterator last){ + TinySTL::pop_heap(first, last, + TinySTL::less::value_type>()); + } template - void pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); + void pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp){ + TinySTL::swap(*first, *(last - 1)); + if (last - first >= 2) + down(first, last - 2, first, comp); + } //********* [sort_heap] *************** template void sort_heap(RandomAccessIterator first, RandomAccessIterator last);