Разобьём массив на несколько групп к примеру на 2 группы (A1,A1,...)(...,An-1,An). И будем перемещать элементы из первой во вторую. Тем самым мы видим экономию нам не нужно проверять последовательно все элементы.
А теперь разобьем на 4 группы. Если мы будем делать перемещения внутри групп, то выигрыша нам не видать отсюда понятно что перемещения надо вести между группами. Поэтому в 3 цикле и используется
gap который определяет размер группы.
Да спасибо, я вроде как понял.
Это становится ясным после второго уменьшения шага
gap = n/4. А вначале, когда две группы (половины), просто идет перемещение элементов из одной половины в другую.