Загрузка данных


using System;

namespace SortingApp
{
    /// <summary>
    /// Класс для демонстрации работы алгоритма шейкерной сортировки.
    /// </summary>
    class Program
    {
        /// <summary>
        /// Точка входа в программу. Отвечает за взаимодействие с пользователем (I/O).
        /// </summary>
        static void Main(string[] args)
        {
            int[] numbers = { 5, 1, 4, 2, 8, 0, 2 };

            Console.WriteLine($"Исходный массив: {string.Join(", ", numbers)}");

            PerformShakerSort(numbers);

            Console.WriteLine($"Отсортированный массив: {string.Join(", ", numbers)}");
        }

        /// <summary>
        /// Выполняет сортировку массива целых чисел методом шейкерной сортировки.
        /// </summary>
        /// <param name="array">Массив для сортировки.</param>
        private static void PerformShakerSort(int[] array)
        {
            int leftIndex = 0;
            int rightIndex = array.Length - 1;

            while (leftIndex < rightIndex)
            {
                bool isSwapped = false;

                // Проход слева направо
                for (int i = leftIndex; i < rightIndex; i++)
                {
                    if (array[i] > array[i + 1])
                    {
                        SwapElements(ref array[i], ref array[i + 1]);
                        isSwapped = true;
                    }
                }

                rightIndex--;

                // Если обменов не было, массив отсортирован
                if (!isSwapped)
                {
                    break;
                }

                isSwapped = false;

                // Проход справа налево
                for (int i = rightIndex; i > leftIndex; i--)
                {
                    if (array[i] < array[i - 1])
                    {
                        SwapElements(ref array[i], ref array[i - 1]);
                        isSwapped = true;
                    }
                }

                leftIndex++;

                if (!isSwapped)
                {
                    break;
                }
            }
        }

        /// <summary>
        /// Вспомогательный метод для обмена значениями двух элементов.
        /// </summary>
        private static void SwapElements(ref int firstValue, ref int secondValue)
        {
            int tempValue = firstValue;
            firstValue = secondValue;
            secondValue = tempValue;
        }
    }
}