shaker sort #include #include #include using namespace std; const int len=4; int a[len]; void shakersort() { int napr, tmp, p, j, k; p=0; //Текущая позиция в массиве napr = 1; //Направление движения: 1- слево на право, -1 справо на лево for (k=len-1;k>=1;k--) //k - количество сравниваемых пар { //с уменьшением k отсекаем границы //(при проходе вправо до конца границы максимальный элемент выталкивается на границу, таким обр. мы его не рассматриваем) //при движении в обратном направлении на левую границу выталкивается минимальный элемент, таким обр. цикл перестановки его не рассматривает //за счет сужения границ достигается оптимизация, стандартного алгоритма "пузырька" for (j=1; j<=k; j++) //Производим перестановку в заданных границах { if ((a[p]-a[p+napr])*napr>0) { tmp = a[p]; //Перемещение числа a[p] = a[p+napr]; a[p+napr] = tmp; } p=p+napr; } napr = -napr; //left => right p = p+napr; //отсекаем граничный элемент } } void main() { int i; for ( i=0; i<=len; i++) a=rand(); cout << "Ishodniy - " < for (int i=0; i<=len; i++) cout < shakersort(); cout < for (int i=0; i<=len; i++) cout <