сортировка слиянием списка, именно списка!! Меня интересует, там где я присваиваю список из массива другому списку
#include <iostream>
#include <list>
typedef std::list<int> Mylist;
void mergeSort(Mylist &list)
{
//длина списка
int n = list.size();
Mylist a;
Mylist b;
//------------разбиение на два списка----------------
while (list.size() > 0)
{
a.push_back(list.front());
list.pop_front();
if (list.size() > 0) {
b.push_back(list.front());
list.pop_front();
}
}
//---------------------------------
//q - размер a; r - размер b; m - размер a + b
int q, r, m;
Mylist arrLists[2];
// размер серий
int p = 1;
//активная очередь
int i;
while (p < n)
{
i = 0;
m = n;
arrLists[0].clear();
arrLists[1].clear();
while (m > 0)
{
q = (m >= p) ? p : m;
m -= q;
r = (m >= p) ? p : m;
m -= r;
//------------слияние списков a и b в c_i-------------
while (q > 0 && r > 0)
{
if (a.front() < b.front()) {
arrLists[i].push_back(a.front());
a.pop_front();
q--;
}
else
{
arrLists[i].push_back(b.front());
b.pop_front();
r--;
}
}
while (q > 0)
{
arrLists[i].push_back(a.front());
a.pop_front();
q--;
}
while (r > 0)
{
arrLists[i].push_back(b.front());
b.pop_front();
r--;
}
//-----------------------------------------
i = 1 - i;
}
a = arrLists[0];
b = arrLists[1];
p *= 2;
}
list = arrLists[0];
}
int main()
{
Mylist list = { 2, 4, 6, 1, 9, 0, 4, 6, 3, 10 };
mergeSort(list);
for (auto el : list)
{
std::cout << el << " ";
}
std::cout << std::endl;
}
проверяй при помощи valgrind
а как это
я сейчас скомпилил твой код и проверил
Ты хоть в одном месте память-то выделяешь? Где хоть одно выделение динамическое объектов ?
Нет, все статическое
Тогда откуда бы утечки взялись..
Я думал сам список внутри использует динамическое выделение и его надо убивать
использует. Не надо.
А при присвоении списка в другую переменную, он полностью скопируется? То есть будет выделена новая память?
А если это список инстансов объектов, как мне этот список присвоить в другую переменную, чтобы не создавались новые объекты?
А что делать? Список указателей на объекты, все же вычисления сбросятся при создании новых инстанс
Список указателей на объекты длеать. Что там сбросится — не понял.
В объекте вычисление и его в список добавил, а потом список присвоил в другую переменную,создадуться новые объекты и вычисления пропадут?
Обсуждают сегодня