標準の間隔サイズを使用している場合と、非標準のサイズを使用している場合のシェルソートの効率をテストする必要があります。私が遭遇している問題は、非標準の間隔を使用しようとしたときです。
これは、h が標準間隔サイズに等しい場合の私の Shellsort です。
public void shellSort()
{
int inner, outer;
int temp;
int h = 1;
while (h <= length / 3)
{
h = h * 3 + 1;
}
while (h > 0)
{
for (outer = h; outer < length; outer++)
{
temp = data[outer];
inner = outer;
while (inner > h - 1 && data[inner - h] >= temp)
{
data[inner] = data[inner - h];
inner -= h;
}
data[inner] = temp;
}
h = (h - 1) / 3;
}
}
そして、これが素数間隔を使用する私の試みです
private int[] primes = {0, 1, 3, 7, 13, 31, 97, 211, 503, 1013, 2503, 5171};
public void shellSort()
{
int inner, outer;
int temp;
int count = this.h.length - 1;
int h = 1;
h = primes[primes.length - 1] * 2 > length ? primes[primes.length - 1] : primes[primes.length - 2];
while (h > 0)
{
for (outer = h; outer < length; outer++)
{
temp = data[outer];
inner = outer;
while (inner > h - 1 && data[inner - h] >= temp)
{
data[inner] = data[inner - h];
inner -= h;
}
data[inner] = temp;
}
if(count - 1 > 0)
h = primes[count - 1];
}
}
リアルタイム効率に基づいて 2 つを比較しようとしていますが、このプリム間隔を機能させる方法がわかりません。
私はテストしようとしています:
- Shellsort は、適切に選択された間隔サイズで O(N^2) よりも優れたパフォーマンスを発揮します
- 選択された一連の間隔サイズは、O(N^2) ランタイムよりも優れたものを達成するために重要です
助けてくれてありがとう。