незваный гость писал(а):
:evil:
"""Меня терзают смутные сомнения.""" Предполагая, что подпрограмма перестановки сделана, где гарантия, что пузырек остановится? (Может быть, мой вопрос сводится к тому, как сделать маркер начала. А это, в свою очередь, к вопросу, как сделать 00.)
Сделать 00 не проблема. Сначала пишем прогу для случая, когда два 00 есть, а потом еще ее модификацию для случая, когда есть только один 0: у самого первого слова заменяем первую единицу на 0 (получая таким образом два нуля) и помним этот факт, когда дело доходит до сравнения/обмена первого слова со вторым по счету. Аналогичным образом можно получить два нуля для обозначения конца сортированного участка.
Бесконечная в два конца лента тоже проблем не доставляет, в этом случае ведем поиск новых слов по одной позиции вправо и влево: вправо пробегаем отсортированный участок (до двух нулей), и смотрим есть ли сразу за ним новое слово, если есть обрабатываем, если нет ставим 1; бежим влево до двух нулей и смотрим есть ли там новое слово, есть - обрабатываем, нет - ставим единичку; затем снова бежим вправо по отсортированному участку до двух нулей, затем ищем нашу единичку, стираем ее, смотрим есть ли слово в следующей позиции, если есть - обрабатываем, нет - ставим единичку в эту позицию; затем бежим вправо до 1 после отсортированного участка и сдвигаем ее правее, если слово не найдено и т.д.
С искусственным созданием двух нулей (при необходимости) ситуация та же, что в однонаправленной бесконечной лентой.