131
правка
Изменения
→Модификации
jump = n
bool swapped = true;
while (jump > 1 and swapped) if (jump > 1) jump /= k;
swapped = false;
for ( i = 0; i + jump < size; ++i)
if a[i + jump]< array[i]) swap(array[i], array[i + jump]); swapped = true;
Пояснения: Изначально расстояние между сравниваемыми элементами равно <tex> n/k </tex>, где k =1.24733 {{---}} оптимальное число для этого алгоритма. Сортируем массив по этому k, потом уменьшаем его по этому же правилу. Когда k достигает единицы, массив досортировывается обычным пузырьком.