ストレート挿入ソートの基本的な考え方は、ソートされる n 個の要素を順序付きリストと順序なしリストとして扱うことです。最初は、順序付きリストには 1 つの要素のみが含まれ、順序なしリストには n -1 個の要素が含まれます。ソート処理は、毎回、順序なしリストから最初の要素を取り出し、順序付きリストの適切な位置に挿入して、新しい順序付きリストを作成します。これを n-1 回繰り返して、ソート処理を完了します。
a[i] を a[0]、a[1]、...、a[i-1] に挿入する具体的な実装プロセスは次のとおりです。まず a[i] を変数 t に代入し、次に t を順番に代入します。 a[i-1]、a[i-2]、... そして、特定の j (0
改善方法
検索比較操作とレコード移動操作を交互に行う方式。
具体的な方法:
挿入するレコード R[i] のキーワードと、順序付けされた領域内のレコード R[j] (j=i-1, i-2,...,1) のキーワードを右から左に比較します。
① R[j] のキーワードが R[i] のキーワードより大きい場合、R[j] を 1 つ後ろに移動します。
②R[j]のキーワードがR[i]のキーワード以下であれば検索処理を終了し、j+1がR[i]の挿入位置となります。
R[i] より大きいキーワードを持つレコードは後方に移動されているため、j+1 の位置は空になっています。この位置に R[i] を直接挿入する限り、直接挿入ソートを完了できます。
つまり、新しいシーケンスの終わりから比較を開始し、シフトを実行します。
PHPコード:
[php]
エコー '
'; $arr = 配列(90,5,3,9,2,6,10,30,0,0,0,0,0); print_r(挿入ソート($arr));
関数 insertSort($arr){
$res = array();//挿入するスペース
$res[0] = $arr[0];//最初の文字を最初に入れます
for($i=1;$i$c = count($res);//ループ数を計算する
for($j=$c;$j>=0;$j--){
($res[$j-1] $res[$j] = $arr[$i]; 。 }その他{
$res[$j] = $res[$j-1];//後方にシフト
}
}
$res を返します
}
?>
著者:dats0407
http://www.bkjia.com/PHPjc/478117.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/478117.html