sortowanie heapsort

0

Witam, mam taki projekt:

Napisać algorytm sortujący heapsort.

Algorytm powinien być możliwie w tej samej konwencji co jedna z wersji std::sort mianowicie:

template<class RandomAccessIterator, class P>
void twojlogin_heapsort(RandomAccessIterator First,
RandomAccessIterator Last, P Comp);

Trzeci argument powinien być obiektem, który ma zdefiniowany dwuargumentowy operator() zwracający zmienna typu bool mówiącą o tym czy obiekt podany w pierwszym argumencie powinien się znaleźć przed obiektem podanym w drugim argumencie (czyli dokładnie tak jak w std::sort).

Wszystko fajnie, wydaje sie proste, algorytm powszechnie znany, wiem jak dziala, ale mam problem z tymi iteratorami.

W jednej z funkcji:

template<class RandomAccessIterator>
void popraw_kopiec(RandomAccessIterator _first, RandomAccessIterator _last, unsigned int node)
{
        int left = node*2;
        int right = left+1;
        int max = node;

        if (_last-_first > left && *(_first+max) < *(_first+left))
                max = left;
        if ( right < _last-_first && *(_first+right) > *(_first+max) )
                max = right;

        if ( max != node ) {

                RandomAccessIterator tmp;
                *(tmp)=*(_first+node);  //TU WYWALA NARUSZENIE PAMIECI
                *(_first+node)=*(_first+max);
                *(_first+max)=*(tmp);
                popraw_kopiec(_first, _last, max);
        }
}

właśnie przy zamianie elementów miejscami wywala mi blad, mysle ze zle odwoluje sie do wartosci przechowywanej przez ten iterator..
Wie ktos jak to zrobic poprawnie, lub moze posiada jakies materialy, źródła std::sort?

1 użytkowników online, w tym zalogowanych: 0, gości: 1