2012-12-11 86 views
3

有沒有一種方法可以計算for循環的開始點以及對它的調整。原始循環具有這些條件Java中的shell排序算法變化

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

我調整它來排序設置希巴德shell的條件,並得到了這個

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

它的工作原理稍微好一點的,甚至可能是正確的,但我想從這裏使用更高級的shell。

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

如何可以把(3 ^的k - 1)/ 2比頂N/3的成爲循環條件不大於?

+0

你的意思是3^N - 1? – Juvanis

+1

你的問題看起來很簡單。你在哪裏努力轉換這些值?你似乎意識到'Math.pow'。你知道'Math.ceil()'正確嗎?你嘗試過一些不太正常的東西嗎? – Grambot

+0

使用天花板只是固定其中之一。我的問題是,除非我知道我應該從哪裏開始,否則對於更先進的命令,我不知道要爲for循環做些什麼。 –

回答

3

「k」值是序列的元素。所以,你的循環可能會是這個樣子:

for (int k = 0; (Math.pow(3, k) - 1)/2 <= Math.ceil(n/3); k++) { 
     int gap = (int) ((Math.pow(3, k) - 1)/2); 
     ... 
    } 
0
for(int gap = 1; gap < ((a.length + 2)/3); gap = (((((gap *2)+1)*3)-1)/2))