Квадрати c подход. Пусть стек A содержит значения, B пусто.
Псевдокод:
while not A.Empty:
x = A.Pop
if IsOdd(x):
while not B.Empty and IsEven(B.Peek):
A.Push(B.Pop)
B.Push(x)
while not B.Empty and IsEven(B.Peek):
A.Push(B.Pop)
Теперь A содержит четные элементы, B содержит нечетные.