Соpтиpовка

From
Alex Cvetkov (2:5030/1334)
To
Andrey Belyakov
Date
2002-05-02T10:53:21Z
Area
RU.ALGORITHMS
Hello Andrey!

02 Май 02 02:24, Andrey Belyakov писал(ла) Alexey V. Goloborchy:

 >> 5. Произвольные строки можно отсортировать только пузырьком?
 >> Ответ: Нет, не только.
 AB> Напишите это. Без построения дополнительных массивов указателей на
 AB> строки. Пусть даже не будет ограничения на буфер для одной строки.

Радость моя, только чтобы ты успокоился. Привожу псевдокод (перевести в программу на си не составит труда даже для тебя) алгоритма меняюжего местами две строки в упакованном виде. Как понимаю, именно эта задача вызвала у тебя непреодалимые трудности.

Наити A1 - адрес начала первой строки, B1 - адрес конеца первой строки,
A2, B2 - аналогичные параметры второй строки.
L1 = B1-A1 - длинна первой строки. Аналогично L2 = B2 - B1

Условимся, не ограничивая общности, что первая строка находиться по меньшим адресам в памяти.
Также следует отметить что из условия задачи строки не пересекаються.

Наидем разность dL = L2 - L1
Рассмотрим случай когда она положительна (случай когда она отрицательна в некотором смысле аналогичен, если разность нулевая задача сводиться к тривиальной).

Исходная упакованная строка примет вид PQRUST
где P - начало упакованной строки,
    Q - первая строка
    R - часть исходной упакованной строки между первой и втрой строками
    U - начало второй строки длинны dL
    S - конец второй строки длинны L1
    T - остаток исходной упакованной строки

Итак произведем dL шагов следующего алгоритма.
Циклически сдвигаем подстроку с началом в A1 и концом в A2 + dL, таким образом что первый символ подстроки становиться последним, остальные символы подстроки уменьшают свой адрес на единицу.

В результате исходная упакованная строка примет вид PUQRST
где PQRUST - теже самые подстроки.

Теперь нам осталось заменить подстроки U и S местами.
Сделать это нетрудно, так как они имеют одинаковую длинну.
Итак задача обмена местами двух подстрок строки завершена.

Этот алгоритм может быть использован в любом алгоритме сортировки.

                                           Alex Cvetkov

---
 * Origin: Life suxx (2:5030/1334)