前書き
挿入ソートのコード実装は、バブルソートや選択ソートほど単純で大雑把ではありませんが、ポーカーをプレイしたことがある人なら誰でも数秒で理解できるはずなので、その原理は最も理解しやすいはずです。挿入ソートは、最もシンプルで直感的なソートアルゴリズムです。その動作原理は、順序付けられたシーケンスを構築することです。ソートされていないデータの場合、ソートされたシーケンスを後ろから前にスキャンして、対応する位置を見つけ、挿入します。
バブルソートと同様に、挿入ソートにも、半分割挿入と呼ばれる最適化アルゴリズムがあります。
1.アルゴリズムのステップ
ソートされる最初のシーケンスの最初のエレメントは順序付けられたシーケンスと見なされ、最後のエレメントの2番目のエレメントはソートされていないシーケンスと見なされます。
並べ替えられていないシーケンスを最初から最後までスキャンし、スキャンされた各要素を順序付けられたシーケンスの適切な位置に挿入します。(挿入される要素が順序付けられたシーケンスの要素と等しい場合、挿入される要素は、等しい要素の後に挿入されます。)
2.アニメーションのデモ
PHPコードの実装
/**
* 插入排序
* @param $arr
* @return mixed
*/
public function insertSort($arr)
{
$length = count($arr);
for ($i=1;$i<$length;$i++) {
$temp = $arr[$i]; //待比较元素(开始第一次选的肯定是数组的第二个元素)
for ($j=$i-1;$j>=0;$j--) {
//已排好序的数组循环和待比较元素作对比 (开始第一次已排好序的数组就是原数组第一个元素)
if ($temp<$arr[$j]) {
//如果待比较元素小则放左边
$arr[$j+1] = $arr[$j];
$arr[$j] = $temp;
} else {
//如果待比较元素大则不处理
break;
}
}
}
return $arr;
}
参照記事のアドレス:
https://www.runoob.com/w3cnote/insertion-sort.html