11th
Ноя

Как циклически сдвинуть массив в C#?

Posted by Chas under Пост-обзор

Здравствуйте! Не могли бы помочь, как циклически сдвинуть массив в C# на k элементов?

существуют два принципиально разный подхода (сейчаc лень, но можете порыться, на форуме я как-то приводил примеры кода, правда, на Delphi):
- однопроходный. Каждый элемент сразу сдвигаем на столько элементов, на сколько надо. Это очень эффективно. Но тут возникают сложности, т.к. достатночно муторно вычислить, какой элемент с каким надо менять местами.
- циклический. Любой сдвиг на K элементов это К сдвигов на один элемент. А сдвиг на один элемент – это алгоритмически крайне просто.
Вот пример решения на основании второго подхода:

const int n = 5;
            int[] a = new int[n] { 1, 2, 3, 4, 5 };
            Console.WriteLine("Исходный массив:");

            for (int i = 0; i < n; ++i)
                     Console.Write("\t" + a[i]);
            Console.WriteLine();

            Console.WriteLine("Введите k");
            int k = Convert.ToInt16(Console.ReadLine());

            for (int i = 0; i < k; ++i)
            {
              int aLast = a[n-1];
              for (int j = n-1; j>0; j–)
                  a[j] = a[j-1];
              a[0] = aLast;
            }

            Console.WriteLine("Новый массив: ");
            for (int i = 0; i < n; ++i)
                Console.Write("\t" + a[i]);
            Console.WriteLine();
            Console.ReadKey();

Тема на форуме

Похожие статьи