#include "myalgorithms.h" #include void CocktailSort(int a[], int n) { // Сортировка перемешиванием bool swapped = true; // Индикатор того, было ли перемещение на пред. шаге int start = 0; // Левая граница, изначально в начале int end = n - 1; // Правая граница, изначально в конце // Пробуем двигать элемент слева направо while (swapped) { // Помечаем, что перестановок еще не произошло swapped = false; // Цикл от левой границы до правой for (int i = start; i < end; i++) { // Если элемент справа больше, чем слева, // то меняем их местами. Отмечаем, что перестановка произошла if (a[i] > a[i + 1]) { std::swap(a[i], a[i + 1]); swapped = true; } } // Если перестановок не было, значит массив уже отсортирован. if (!swapped) { break; } // Иначе готовимся к следующему этапу сортировки и // снова считаем, что перестановок пока еще не было swapped = false; // Сужаем правую границу на 1. В прошлом цикле мы // определили, что на этом индексе элемент уже находится // на правильном месте. end--; // Пробуем двигать элемент справа налево for (int i = end - 1; i >= start; i--) { if (a[i] > a[i + 1]) { std::swap(a[i], a[i + 1]); swapped = true; } } // Сужаем левую границу на 1. start++; } }