Задача: Циклический сдвиг массива или строки - 3 уникальных алгоритма
Исходник: Перестановка блоков, язык: C# [code #69, hits: 15048]
автор: this [добавлен: 24.02.2006]
  1. public void CycleShiftByBlocks(ref String strarr, int rotdist)
  2. {
  3. int n = strarr.Length;
  4. if (rotdist == 0 || rotdist == n) return;
  5.  
  6. int i, j, p;
  7. i = p = rotdist;
  8. j = n - p;
  9. while (i != j)
  10. {
  11. if (i > j) {
  12. this.StrSwap(ref strarr, p - i, p, j);
  13. i -= j;
  14. } else {
  15. this.StrSwap(ref strarr, p - i, p + j - i, i);
  16. j -= i;
  17. }
  18. }
  19. this.StrSwap(ref strarr, p - i, p, i);
  20. }
Циклический сдвиг массива символов strarr на rotdist позиций перестановкой блоков.

Использует всего несколько дополнительных переменных.
По производительности - наболее быстрый алгоритм среди аналогов.

this.StrSwap() - метод перестановки 2-х отрезков строки
Тестировалось на: MS Visual Studio 2005, .NET Framework 2.0

+добавить реализацию