<< | к задаче | главная | печатать | обсудить(0 сообщений) >>
Задача: Циклический сдвиг одномерного массива или строки, 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)

 
каталог | задачи | паттерны | исходники | стат | форумы | карта сайта | контакты | ссылки 
© 2000-2018 CodeLAB Group
  Все права защищены
Страница сгенерирована за 0.002828 секунд
Количество запросов к БД: 3, gzip: 2.5kb/7.1kb(65%)