Сортировка массива C#. Алгоритм «Сортировка перемешиванием»

В литературе можно также встретить такие названия сортировки перемешиванием — шейкерная сортировка и двунаправленная пузырьковая сортировка. Алгоритм представляет собой одну из разновидностей «сортировки пузырьком«. Основное отличие заключается в том, что в классической сортировке пузырьком происходит однонаправленное движение элементов (снизу — вверх), в то время, как сортировке перемешиванием мы сначала проходим снизу-вверху, а затем сверху-вниз.

Алгоритм

Алгоритм сортировки перемешиванием такой же, что и у пузырьковой сортировки и при этом добавляется цикл пробега по массиву сверху-вниз.

Реализация алгоритма сортировки перемешиванием в C#

Для реализации алгоритма написано два метода: Swap() — меняет местами два элемента массива, CocktailSort() проводит шейкерную сортировку массива целых чисел.

static void Swap(int[] array, int i, int j)
{
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

static void CocktailSort(int[] inArray)
{
    int left = 0,
         right = inArray.Length - 1;

    while (left < right)
    {
        for (int i = left; i < right; i++)
        {
           if (inArray[i] > inArray[i + 1])
                Swap(inArray, i, i + 1);
        }
        right--;

        for (int i = right; i > left; i--)
        {
           if (inArray[i - 1] > inArray[i])
                Swap(inArray, i - 1, i);
        }
        left++;
    }
}

Пример сортировки массива

Console.WriteLine("Введите через запятую целые числа и нажмите Enter");
string[] nums = Console.ReadLine().Split(new char[] { ',' });
int[] intArray = new int[nums.Length];
for (int i = 0; i < nums.Length; i++)
{
    intArray[i] = int.Parse(nums[i]);
}

CocktailSort(intArray);

Console.WriteLine("\r\nОтсортированный массив:");
foreach (int value in intArray)
{
    Console.Write($"{value} ");
}

Консольный вывод:

Введите через запятую целые числа и нажмите Enter

-10,1,2,3,0,9,8,7,6,5,4,3,2,1,100,101

Отсортированный массив:

-10 0 1 1 2 2 3 3 4 5 6 7 8 9 100 101

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии