Skip to content

Instantly share code, notes, and snippets.

@todorok1
Created August 27, 2019 09:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save todorok1/d638bc646e20b66d9de66608b713fef0 to your computer and use it in GitHub Desktop.
Save todorok1/d638bc646e20b66d9de66608b713fef0 to your computer and use it in GitHub Desktop.
ノームソートアルゴリズムのC#による実装例。
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