shellsort에서 질문입니다(이해가 안가는게 있어서..)

buildkdom의 이미지

(제 3장 제어흐름 - The C Programming Language)
원서로는 페이지가 어디인지는 잘 모르겠으나..
암튼 번역본으로는 85페이지 입니다.

여기서 shell sort가 나오는데요

한 부분이 이해가 안가서 글 올려봅니다..

void shellsort(int v[], int n)
{
        int gap, i, j, temp;
        
        for(gap = n/2 ; gap>0 ; gap /= 2)
                for(i=gap ; i<n ; i++)
                        for(i=j-gap ; j>=0 && v[j] > v[j+gap] ; j-=gap){        
                                temp = v[j];
                                v[j] = v[j+gap];
                                v[j+gap] = v[j];                
                        }
        
        
}

가장 안쪽에 있는 (3번째) for문에서 j-=gap 이라는 부분을 왜 이런식으로
구현하게 되었는지 모르겠습니다. 다른 부분들은 왜 이렇게 정렬을 시도했는지
이해가 가는데... 이 부분이 이해가 쉽게 안됩니다..

그냥 단지 배열 v[]에서, 인덱스로 들어가는 값을 한정한 후, 계산되는 값을
고려한 부분 보다 좀 더 깊은 의미... 뭔가... 더 깊은 내용이 있을 듯 해서요;;

(없으면 ... ;;))