ノームソートアルゴリズムのC#による実装例。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
/// <Summary> | |
/// ノームソートを行うスクリプトです。 | |
/// </Summary> | |
public class GnomeSort : SortBase { | |
void Start(){ | |
ExecuteSort(); | |
} | |
void ExecuteSort(){ | |
// ソートしたい配列を定義します。 | |
int[] targetArray = new int[11]{26, 400, 19, 504, 8, 500, 58, 14, 401, 168, 13}; | |
// コンソールに配列の中身を表示します。 | |
InspectArrayContents(targetArray); | |
// 処理回数を保持する変数です。 | |
int iterationNum = 0; | |
// 外側のループが何回実行されたかを保持する変数です。 | |
int loopNum = 0; | |
// 交換回数を保持する変数です。 | |
int swapNum = 0; | |
// 確認対象のインデックスを保持します。 | |
int gnome = 1; | |
// ノームソートで配列の中身を昇順で並べ替えます。 | |
while (gnome < targetArray.Length){ | |
// ループの呼ばれた回数を増やします。 | |
iterationNum++; | |
// 処理回数を表示します。 | |
Debug.Log($"{loopNum + 1}週目の処理"); | |
// ひとつ前の要素と比較し、順序が逆であれば入れ替えます。 | |
if (targetArray[gnome] < targetArray[gnome - 1]){ | |
// 配列の要素の交換を行います。 | |
int temp = targetArray[gnome]; | |
targetArray[gnome] = targetArray[gnome - 1]; | |
targetArray[gnome - 1] = temp; | |
// 交換回数の値を増やします。 | |
swapNum++; | |
// 確認対象のインデックスをひとつ戻します。 | |
gnome--; | |
if (gnome == 0){ | |
// 配列の最小インデックスの場合は次のインデックスに進みます。 | |
gnome++; | |
} | |
} else { | |
// 順序が正しい場合は次のインデックスに進みます。 | |
gnome++; | |
} | |
// コンソールに配列の中身を表示します。 | |
InspectArrayContents(targetArray); | |
// ループ回数のカウントを増やします。 | |
loopNum++; | |
} | |
// コンソールに配列の中身を表示します。 | |
Debug.Log("*** 最終結果 ***"); | |
InspectArrayContents(targetArray); | |
Debug.Log($"処理回数は {iterationNum} 回、 交換回数は {swapNum} 回でした。"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment