В литературе можно также встретить такие названия сортировки перемешиванием — шейкерная сортировка и двунаправленная пузырьковая сортировка. Алгоритм представляет собой одну из разновидностей «сортировки пузырьком«. Основное отличие заключается в том, что в классической сортировке пузырьком происходит однонаправленное движение элементов (снизу — вверх), в то время, как сортировке перемешиванием мы сначала проходим снизу-вверху, а затем сверху-вниз.
Алгоритм
Алгоритм сортировки перемешиванием такой же, что и у пузырьковой сортировки и при этом добавляется цикл пробега по массиву сверху-вниз.
Реализация алгоритма сортировки перемешиванием в 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} "); }
Консольный вывод:
-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