关于希尔排序算法的程序问题

源程序为
void shellsort3(int a[], int n)

{
int i, j, gap;

for (gap = n / 2; gap > 0; gap /= 2)

for (i = gap; i < n; i++)

for (j = i - gap; j >= 0 && a[j] > a[j + gap]; j -= gap)

Swap(a[j], a[j + gap]);

}

如果修改为:
void shellsort3(int a[], int n)

{
int i, j, gap;
gap = 1;
for (i = gap; i < n; i++)

for (j = i - gap; j >= 0 && a[j] > a[j + gap]; j -= gap)

Swap(a[j], a[j + gap]);

}

依然能够实现正确的排序,这是为什么呢

修改为后者性能会降低。