Hill (Shell) 並べ替えまたはシェル メソッドは、インプレース比較並べ替えです。これは、バブル ソート または 挿入ソート の一般化として見ることができます。この方法では、まず互いに離れた要素のペアを並べ替え、その後、比較する要素間の間隔を徐々に詰めていきます。遠く離れた要素から開始すると、隣接要素を交換するよりも速く、場違いの要素を移動できます。
シェルのソート例は次のとおりです。
最初のトラバーサルは「5 ソート」です。 " 、異なる部分配列 (a1、a6、a11)、(a2、a7、a12)、(a3、a8)、(a4、a9)、(a5、a10) に対して挿入ソートを実行します。たとえば、部分配列 (a1、a6、a11) を (62,17,25) から (17,25,62) に変更します。
次に、「3 ソート」では、部分配列 (a1、a4、a7、a10)、(a2、a5、a8、a11)、(a3、a6、a9、a12) に対して挿入ソートを実行します。
最後は配列全体(a1,...,a12)の「1ソート」です。例に示すように、シェル ソート操作のサブ配列は最初は非常に短く、後で長くなりますが、基本的に順序付けされています。どちらの場合でも、挿入ソートは機能します。 ヒル (シェル) ソートは 不安定です。値が等しい要素の相対的な順序が変更される可能性があります。これは、入力が部分的にソートされている場合に高速に実行される適応型ソート アルゴリズムです。
ヒル (シェル) ソートのグラフィックは次のとおりです:
ヒル (シェル) ソート アルゴリズムを実装する PHP のコード例:
<?php function shell_Sort($my_array) { $x = round(count($my_array)/2); while($x > 0) { for($i = $x; $i < count($my_array);$i++){ $temp = $my_array[$i]; $j = $i; while($j >= $x && $my_array[$j-$x] > $temp) { $my_array[$j] = $my_array[$j - $x]; $j -= $x; } $my_array[$j] = $temp; } $x = round($x/2.2); } return $my_array; } $test_array = array(3, 0, 2, 5, -1, 4, 1); echo "原始数组 :\n"; echo implode(', ',$test_array ); echo "\n排序后数组\n:"; echo implode(', ',shell_Sort($test_array)). PHP_EOL;
出力:
原始数组 : 3, 0, 2, 5, -1, 4, 1 排序后数组 :-1, 0, 1, 2, 3, 4, 5
この記事は、PHP Hill (Shell) ソート アルゴリズムの紹介です。シンプルで理解しやすいです。困っている友人に役立つことを願っています。 !
以上がPHP Hill (Shell) ソート アルゴリズムの実装 (コードの詳細説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。