| | | | | |

Heapsort

    template <class RAIter>
    void g_heap_sort (RAIter beg, RAIter end)
    {
      if (end - beg <= 1)
        return;
      size_t size = end - beg, k;
    
      // push elements onto heap one at a time
      for (k = 0; k < size; ++k)
        g_push_heap(beg, beg + (k + 1));
       
      // keep popping largest remaining element to end of remaining range
      for (k = size; k > 1; --k)
        g_pop_heap(beg, beg + k);
    }
    
  • in place
  • not stable
  • run time = Θ(n log n)
  • requires random access iterators

| | Top of Page | 8. Sorting Algorithms - 5 of 16