Там мог быть шаблон std :: stack :: sort, использующий два вспомогательных стека и многофазную сортировку слиянием (временная сложность O (n log (n)), см. Ниже), либо шаблон мог быть реализован на основе базовый тип контейнера: std :: deque, std :: list или std :: vector, поскольку тип контейнера может быть указан для std :: stack, например:
std::stack <int, std::vector<int>> mystack;
std :: sort может использоваться для std :: deque или std :: vector (оба имеют итераторы с произвольным доступом), а std :: list :: sort для std :: list. Я не знаю, разрешены ли для std :: stack другие типы контейнеров или пользовательские типы контейнеров; если разрешено, это может создать проблему при попытке создать std :: stack :: sort на основе типа контейнера.
с использованием вспомогательного стека для сортировки исходного стека
Сортировка стека с одним вспомогательным стеком имеет временную сложность O (n ^ 2). Сортировка стека с двумя вспомогательными стеками, основанная на многофазной сортировке слиянием, имеет временную сложность O (n log (n)), но код сложен. Было бы быстрее переместить стек в массив или вектор, отсортировать массив или вектор, а затем создать новый отсортированный стек.
Если вам интересно узнать о многофазной сортировке слиянием для 3 стеков (исходный и 2 вспомогательных), я написал примеры, ссылки на которые приведены ниже. Они используют настраиваемый контейнер стека на основе массива и работают примерно так же быстро, как стандартная сортировка слиянием в массиве, но требуют 2 временных стека.
Долгое время go, многофазные сортировки слияния использовались для ленточных накопителей. Некоторые ленточные накопители могут читать в обратном направлении, чтобы избежать времени перемотки, по сути, заставляя их складываться как контейнеры (запись вперед, чтение назад). С ленточными накопителями можно использовать метки файлов или записи разного размера для обозначения конца цикла, что избавляет от необходимости отслеживать границы цикла с помощью кода. Многие из продвинутых версий коммерческих программ многофазной сортировки слиянием были проприетарными, и знания по существу утрачивались со временем по мере того, как сортировка лент ускользнула в прошлое.
{ ссылка }