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