ゲーム 公開

連想配列を活用、交換回数が減少「挿入ソート改」公開

 

こんばんは。えいたです。

【整列アルゴリズム】シミュレーション「挿入ソート」公開

挿入ソートの特徴:整列済みの要素と比較 → 適切な要素と交換

適切な要素が前の方であれば、交換回数は増加します。

2を挿入:「1 3 4」 → 「1 3  」 → 「1   4」

改善案:連想配列を用いた場合、交換回数は常に1回

2を挿入:「1→3→4」 → 「13→4」

連想配列は「要素は数字、キーは矢印」の1セットです。

要素の交換ではなく、キーを変更して挿入します。

 

スポンサーリンク

ロジックの改善

連想配列を用いて、交換部分をfor文の外側にしました。

//昇順に整列
for( i = 1  ; i < 要素数 ; i++ ){
 j = i;
 while( j > 0 && sort_array[j-1] > sort_array[j]){
  j--;
 }
 //連想配列のキーを入れ替える
}

・上記のアルゴリズムを使用(要素数:4)

「3→2→4→1」 ← 開始
→4→1」 ← 比較
「24→1」 ← 交換
→1」 ← 比較・交換無し
」 ← 比較
」 ← 比較
」 ← 比較
「1」 ← 交換
」 ← 終了

比較回数5回、交換回数2回になります。

 

「挿入ソート改」で学ぶ

「挿入ソート改」について

ルール

10個の要素について、整列します。

  • 小の指先:要素の比較場所
  • 大の指先:要素の比較場所
  • 済の指先:整列の確定場所(赤背景は整列済み)

上記の場合は交換箇所が決定、小の右側に大を移動します。

全要素が整列するまで、繰り返します。

画面構成

初期化ボタンは、3種類あります。

  • 昇順:要素を昇順にします。
  • 降順:要素を降順にします。
  • ランダム:要素をランダムにします。

実行ボタンは、2種類あります。

手動:ユーザが次ステップの実行権を持つ

自動:自動で次ステップに進む(スピードは、右側のつまみで調節可能)

操作方法

要素を初期化してから、実行ボタンを押して下さい。

全要素を整列:要素が昇順になりました。

 

交換回数について

比較回数の計算式は下記です。

最悪の計算式:要素数  × (要素数 - 1) ÷ 2
最高の計算式:要素数 - 1

交換回数は要素数未満になります。

昇順

比較回数9回・交換回数は0回、最も良いケースです。

降順

比較回数9回・交換回数は45回、最も悪いケースです。

ランダム

比較回数は9~45回・交換回数は0~9回です。

交換回数:0 ~ 要素数 - 1

比較回数は関係がありません。

 

さいごに

全要素を比較する必要はありません。

そして、交換回数も要素数以下です。

つまり「単純な整列アルゴリズム」では最も性能が良いソート!

 

他のゲームも遊んで下さいね。

ゲーム一覧

 

広告(関連)

-ゲーム, 公開