C# ヒル ソート
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class ShellSorter { public static int[] Sort(int[] a) { ShellSort(a); return a; } public static void ShellSort(int[] myArray) { int i, j, increment; int temp; for (increment = myArray.Length / 2; increment > 0; increment /= 2) { for (i = increment; i < myArray.Length; i++) { temp = myArray[i]; for (j = i; j >= increment; j -= increment) { if (temp < myArray[j - increment]) myArray[j] = myArray[j - increment]; else break; } myArray[j] = temp; } } } } }
ヒル ソートは、直接挿入ソート アルゴリズムを改良したもので、最初にソートされたシーケンス全体をいくつかのサブシーケンスに分割し、基本的にシーケンス全体の後でサブシーケンスに対して直接挿入ソートを実行することです。すべてに対して直接挿入ソートを実行します。これは、新しい順序付けされたシーケンスを形成するために使用されます。一般的な除算方法は、2 つの要素間の距離が d=n/2、n/4、n/8... などとなることです。
1. 基本的な考え方:
並べ替えるデータ要素全体をいくつかのグループに分割し、直接挿入方法を使用して同じグループ内のデータ要素を並べ替え、グループの数を徐々に減らし、完了するとすべてのデータ要素を並べ替えます。 1 つのグループ内 ソート後にソート処理は終了します。
2. スキル:
グループの構成は単純に「セグメントごとに分ける」のではなく、一定の増分 dk で区切られたレコードをグループ化し、増分 dk を段階的に短くしていきます (例: 5、 3、1 が順に取得され、dk=1 になるまで続きます。
3. 利点:
キーワード値が小さい要素を素早く進めることができ、順序が基本的に整っていれば、直接挿入ソートを使用できるため、時間効率が大幅に向上します。
例 1:
例 2:
フローチャート
挿入ソートアルゴリズムの場合、元のデータが順序付けされている場合、データは必要ありません移動、および挿入ソート アルゴリズムの効率は主にデータの移動に消費されます。したがって、データ自体を順序付けするか、基本的に順序付けすると、効率が向上することがわかります。 上記は C# と Hill ソートの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。