Почему мой код для слияния на месте работает медленнее, чем std :: inplace_merge? - PullRequest
0 голосов
/ 24 апреля 2020
void bmerge(vecitr itr1, vecitr itr2, vecitr itr3)
{
    int s1 = itr2-itr1;  //both array are contiguous. itr1 is beggining of first arry
    int s2 =  itr3-itr2; // itr2 is beginning of 2nd array and itr3 is end of 2nd array
    int i=0,j=0;
    vector<int> buffer(s1);
    copy(itr1,itr2,buffer.begin()); //copying content of 1st array to a buffer
    vecitr temp = buffer.begin();

    while(i<s1 && j<s2)
    {
        if(*(temp+i) < *(itr2+j))
        {

                *(itr1+k) = *(temp+i);
                i++;
                k++;
        }
        else
        {
                *(itr1+k) = *(itr2+j);
                j++;
                k++;

            }

    }
     if(i<s1)
        {
            copy(temp+i,temp+s1,itr1+k);

        }

}

Этот код работает в 3 раза медленнее, чем std :: inplace_merge. Я просто не понимаю почему. У меня есть вектор около 100 000 итераторов, который указывает на отсортированную последовательность в одном векторе, и я вызываю эту функцию, чтобы рекурсивно объединить их в одну единственную последовательность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...