Variações do algoritmo de ordenação shell em Java

Existe uma maneira de calcular o ponto de partida de um loop for e os ajustes a ele. O loop original tem essas condições

for( int gap = a.length / 2; gap > 0; gap /= 2 )

Eu ajustei para definir as condições do Shell Sort do Hibbard e consegui

for( int gap = (int) Math.pow(2, a.length); gap > 0; gap /= 2 )

Ele funciona um pouco melhor e pode até estar certo, mas eu quero trabalhar com os tipos de shell mais avançados a partir daqui.

http://en.wikipedia.org/wiki/Shellsort#Gap_sequences

Como eu poderia transformar (3 ^ k - 1) / 2 não maior que o teto de n / 3 em uma condição de loop?

questionAnswers(2)

yourAnswerToTheQuestion