Для сортировки входного потока символов используются два стека: Lstack и Hstack. Первоначально Lstack инициализируется символом с кодом 0, Hstack инициализируется символом с максимальным кодом 255. В процессе сортировки часть символов сохраняется в стеке Lstack, другая часть - в стеке Hstack. Стек Lstack предназначен для хранения данных в порядке возрастания их величин. В стеке Hstack символы хранятся в порядке убывания их кодов. При этом, код символа в вершине стека Lstack не должен превосходить по величине код символа в вершине стека Hstack:

Lstack_top <= Hstack_top

По договоренности новые символы входного потока должен принимать стек Lstack. Для сохранения отношения порядка внутри стеков и между вершинами стеков при поступлении нового символа в стек Lstack, нужно чтобы код принятого символа S был в диапазоне между кодами вершин стеков:

Lstack_top <= S <= Hstack_top

Выполнение этого неравенства можно обеспечить соответствующей перекачкой данных между стеками при поступлении очередного символа из входного потока:

Lstack --> Hstack 

Lstack<--Hstack

Когда входной поток будет исчерпан, нужно передать все данные из стека Lstack в стек Hstack:

Lstack --> Hstack.

где они автоматически будут расположены в порядке убывания их величин. Последовательное выталкивание данных из стека Hstack образует выходной поток, где символы располагаются в порядке возрастания их кодов ASCII:

Hstack --> stdout.

Пример 1

Рассмотренный алгоритм иллюстрирует состояние стеков Lstack и Hstack при обработке входной последовательности латинских букв:

m (109) , d (100) , x (120) , f (102) , b (98) , p (112),
где в скобках указаны десятичные коды символов.
1. Начальное состояние:
Lstack: 0
Hstack: 255

2. Состояние после ввода m (109):
Lstack: 0, 109
Hstack:: 255
3. Состояние после ввода d (100):
Lstack: 0, 100
Hstack:: 255, 109

4. Состояние после ввода x (120):
Lstack: 0, 100, 109, 120
Hstack:: 255
5. Состояние после ввода f (102):
Lstack: 0, 100, 102
Hstack:: 255, 120, 109
6. Состояние после ввода b (98):
Lstack: : 0,98
Hstack:: 255, 120, 109, 102, 100
7. Состояние после ввода p (112):
Lstack:0, 98, 100, 102, 109, 112
Hstack: 255, 120

8. Состояние после завершения ввода:
Lstack:0
Hstack::255, 120, 112, 109, 102, 100, 98

Печать стека Hstack образует выходную последовательность

b (98), d (100), f (102), m (109), p (112), x (120),

где символы упорядочены по возрастанию их кодов ASCII (т. е. по алфавиту).