サーチ…
シェルの基本情報のソート
シェルソートは、減少インクリメントソートとも呼ばれ、発明者ドナルドの名前を冠した最も古いソートアルゴリズムの1つです。 L. Shell (1959)。理解しやすく、実装が簡単です。しかし、複雑さの分析はもう少し洗練されています。
シェルソートの考え方は次のとおりです。
- データ配列を2次元配列に配置する
- 配列の列をソートする
シェルソートは挿入のソートを改善します。これは、離れた要素を比較し、離れた要素を比較し、最後に隣接する要素を比較することから始まります(事実上挿入の並べ替え)。
その効果は、データシーケンスが部分的にソートされていることです。上記のプロセスが繰り返されますが、その都度、より狭いアレイ、すなわちより少ない数の列を用いて繰り返される。最後のステップでは、配列は1つの列のみで構成されます。
シェルソートの例:
シェルソートの疑似コード:
input
foreach element in input
{
for(i = gap; i < n; i++)
{
temp = a[i]
for (j = i; j >= gap and a[j - gap] > temp; j -= gap)
{
a[j] = a[j - gap]
}
a[j] = temp
}
}
補助空間: O(n) total, O(1) auxiliary
時間の複雑さ: O(nlogn)
C#の実装
public class ShellSort
{
static void SortShell(int[] input, int n)
{
var inc = 3;
while (inc > 0)
{
int i;
for (i = 0; i < n; i++)
{
var j = i;
var temp = input[i];
while ((j >= inc) && (input[j - inc] > temp))
{
input[j] = input[j - inc];
j = j - inc;
}
input[j] = temp;
}
if (inc / 2 != 0)
inc = inc / 2;
else if (inc == 1)
inc = 0;
else
inc = 1;
}
}
public static int[] Main(int[] input)
{
SortShell(input, input.Length);
return input;
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow