<< | к задаче | главная | печатать | обсудить(0 сообщений) >>
Задача: Циклический сдвиг одномерного массива или строки, 3 уникальных алгоритма
Исходник: Циклический сдвиг строки символов, перестановка блоков [C#, code #69, hits: 9565, рейтинг: 3/7,4.84(2574)] +
автор: 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-х отрезков строки

+добавить реализацию
 
каталог | задачи | паттерны | исходники | стат | форумы | карта сайта | контакты | ссылки 
© 2000-2018 CodeLAB Group
  Все права защищены
Страница сгенерирована за 0.007306 секунд
Количество запросов к БД: 9, gzip: 3.0kb/8.6kb(65%)