<< | к задаче | главная | печатать | обсудить(0 сообщений) >>
Задача: Циклический сдвиг одномерного массива или строки, 3 уникальных алгоритма
Исходник: Циклический сдвиг строки символов, последовательный обмен [C#, code #64, hits: 10163, рейтинг: 3/7,4.8(2840)] +
автор: this [добавлен: 24.02.2006] управление:
  1. public void CycleShift(ref String strarr, int rotdist)
  2. {
  3. int n = strarr.Length;
  4. for (int i = 0; i < this.GetCommonDivisor(n, rotdist); i++)
  5. {
  6. Char t = strarr[i];
  7. int j = i;
  8. while (true)
  9. {
  10. int k = j + rotdist;
  11. if (k >= n) k -= n;
  12. if (k == i) break;
  13.  
  14. //Делаем strarr[j] = strarr[k];
  15. this.ReplaceCharInString(ref strarr, j, strarr[k]);
  16. j = k;
  17. }
  18. //Делаем strarr[j] = t;
  19. this.ReplaceCharInString(ref strarr, j, t);
  20. }
  21. }
Циклический сдвиг массива символов strarr на rotdist позиций

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

По производительности уступает перестановке блоками и функции переворота

this.GetCommonDivisor() - метод нахождения наибольшего общего делителя
this.ReplaceCharInString() - метод замены символа в строке

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