От: | VVV | ||
Дата: | 01.11.02 12:53 | ||
Оценка: | 78 (6) |
IK>Задача.
IK>Дано: массив на N элементов.
IK>Требуется: сдвинуть массив циклически на K позиций вправо.
IK>K и N — любые положительные числа (разумные).
IK>Доп.условия:
IK>1. Дополнительную память не выделять (кроме нескольких временных переменных).
IK>То есть не пропорционально K или N.
IK>2. Рекурсией в глубину K или N не пользоваться.
IK>3. Алгоритм должен обладать сложностью не хуже o(N).
IK>Пример:
IK>Для массива 1 2 3 4 5 6 7 при сдвиге на 3 позиции должно получиться
IK>5 6 7 1 2 3 4.
//n - размерность массива
//m - на сколько сдвинуть
shift(arr[], n, m)
{
reverse(arr, 0, m);
reverse(arr, m, n);
reverse(arr, 0, n);
}