C Хочет определить функцию объединения для типа данных класса. список классов определен, и список содержит две переменные-члена размер и *значения.

#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);
}