Задача: Циклический сдвиг массива или строки - 3 уникальных алгоритма
Псевдокод: массив, циклический сдвиг через перестановку блоков
  1. /* Функция swap(a, b, m) меняем местами:
  2. * x[a..a+m-1] и x[b..b+m-1]
  3. */
  4.  
  5. if rotdist == 0 || rotdist == n
  6. exit
  7.  
  8. i = p = rotdist
  9. j = n - p
  10. while i != j
  11. /* инвариант:
  12. x[0..p-i] двигать не нужно
  13. x[p-i..p-1] = a (нужно поменять с b)
  14. x[p..p+j-1] = b (нужно поменять с a)
  15. x[p+j..n-1] двигать не нужно */
  16.  
  17. if i > j
  18. swap(p-i, p, j)
  19. i -= j
  20. else
  21. swap(p-i, p+j-i, i)
  22. j -= i
  23. swap(p-i, p, i)