#class #merge #mergesort #copy-constructor
Вопрос:
Описание
Реализуйте описанную функцию-член для сортировки списка значений. Эта функция является пустой функцией и не принимает никаких параметров в качестве входных данных. Его единственная цель-отсортировать все текущие значения списка в порядке возрастания.
Предлагаемое Решение
Алгоритм сортировки слиянием является рекурсивным алгоритмом. Ваш базовый случай заключается в том, что если вас попросят отсортировать список размером 1 или пустой список размером 0, то список уже тривиально отсортирован, поэтому просто вернитесь и ничего не делайте.
Но если в списке есть 2 или более пунктов, вам нужно
Разделите этот экземпляр на 2 списка одинакового размера, нижнюю и верхнюю копии половин этого списка. Вызовите функцию сортировки() рекурсивно для обоих этих новых скопированных подсписков. Вызовите функцию merge() в этом экземпляре с возвращенными, теперь отсортированными копиями нижнего и верхнего списков. Дополнительные требования
Вам необходимо повторно использовать конструктор копирования вложенного списка при разделении списка на две половины для рекурсивных сортировок и слияния. Конечно, вам необходимо повторно использовать функцию merge() для выполнения слияния теперь отсортированных половинных подсписков. Вам необходимо реализовать эту сортировку с помощью рекурсивной сортировки слиянием.
У меня уже определен необходимый конструктор копирования подсписка и функция слияния. Ниже приведен мой код, но он выдает ошибку и даже не запускает тесты. Можете ли вы помочь мне разобраться, в чем проблема?
void List::sort()
{
if (size == 0 || size == 1)
{
return;
}
int mid = size / 2;
List list;
List lower(list,0,mid);
List upper(list,mid 1, size -1);
lower.sort();
upper.sort();
merge(lower, upper);
}