template<class T> void ShellSortBin2(T* x) { int d = n, i, j; while (d > 0) { d /= 2; /* Данный цикл представляет собой 1 "пузырьковый" проход по всем группам элементов на данном шаге. Кроме того, здесь, он выполняется и в конце, когда d=1, позволяя избежать результирующей сортировки */ for (i = d; i < n; i++) { T tmp = x[i]; for (j = i-d; (j >= 0) && (x[j] > tmp); j -= d) { x[j+d] = x[j]; } x[j+d] = tmp; } } }