Каков наилучший метод для сортировки стека в порядке возрастания? Я наткнулся на этот вопрос интервью, и я столкнулся с некоторыми проблемами для лучшего и наиболее эффективного решения.
Есть два метода, о которых я могу подумать.
Чтобы вытолкнуть все содержимое стека и сохранить его в массиве, а затем отсортировать массив в
O(nLog n)
и затем поместите содержимое обратно в стек. Не лучший способ ....
Выполнить рекурсивную реализацию стека для его сортировки
void sort(stack)
{
type x;
if (!isEmpty(stack)) {
x = pop(stack);
sort(stack);
insert(x, stack);
}
}
void insert(x, stack)
{
type y;
if (!isEmpty(stack) && top(stack) < x) {
y = pop(stack);
insert(x, stack);
push(y, stack);
}
else {
push(x, stack);
}
}
Но второй метод, кажется, выполняет слишком много рекурсивных вызовов, и издержки будут проблемой, если стек окажется действительно большим.
Можно ли решить эту проблему гораздо лучшим образом для лучшей пространственно-временной сложности?
Существует так много рекурсивных вызовов (перекрывающихся подзадач), это претендент на dynamic programming
тип проблем?
Как лучше всего это решить?