проблема с merge sort. Выдает stackoverflow

58
14 февраля 2018, 11:48
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <list>
void Merge(std::list<int> & l, std::list<int>::iterator begin, std::list<int>::iterator mid, std::list<int>::iterator end)
{
    auto temp_mid = mid;
    auto temp_end = end++;
    while (begin != mid && temp_mid != temp_end)
    {
        if (*begin < *temp_mid)
        {
            l.push_front(*begin);
            begin = l.erase(begin);
        }
        else
        {
            l.push_front(*temp_mid);
            temp_mid = l.erase(temp_mid);
        }
    }
    while (begin != mid)
    {
        l.push_front(*begin);
        begin = l.erase(begin);
    }
    while (temp_mid != temp_end)
    {
        l.push_front(*temp_mid);
        temp_mid=l.erase(temp_mid);
    }
}
std::list<int>::iterator getMid(std::list<int>::iterator begin, std::list<int>::iterator end)
{
    auto mid = begin;
    while (begin != end)
    {
        begin++;
        if (begin != end)
        {
            begin++;
        }
        else
        {
            break;
        }
        mid++;
    }
    return mid;
}
void MergeSort(std::list<int> & l, std::list<int>::iterator begin, std::list<int>::iterator end)
{
    //auto temp_end = end++;
    if (begin != end)
    {
        auto mid = getMid(begin, end);
        MergeSort(l, begin, mid);
        MergeSort(l, mid, end);
        Merge(l, begin, mid, end);
    }
}
int main()
{
    int n,x;
    std::list<int> l;
    srand(time(NULL));
    std::cout << "n = ";
    std::cin >> n;
    for (int i = 0; i < n; i++)
    {
        l.push_back(rand() % 100);
    }
    for (auto iter = l.begin(); iter != l.end(); iter++)
    {
        std::cout << *iter << "  ";
    }
    std::cout << std::endl;
    MergeSort(l, l.begin(), --(l.end()));
    for (auto iter = l.begin(); iter != l.end(); iter++)
    {
        std::cout << *iter << "  ";
    }
    std::cin >> x;
    return 0;
}
READ ALSO
Конвертировать в кодировку UTF8

Конвертировать в кодировку UTF8

Есть замечательный способ создать строку уже в кодировке utf8:

84
SFINAE перегрузка по сигнатуре Callable-объекта

SFINAE перегрузка по сигнатуре Callable-объекта

Ребята, помогите написать перегруженную функцию, которая принимает на вход произвольный Callable объект:

85
Подключение cpp файла

Подключение cpp файла

Работаю в visual studioНашел библиотеку с большими числами:bigint, но не понимаю как ее правильно подключить и использовать

40