😎

バブルソートのコード①

2024/02/21に公開

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BubbleSortManager : MonoBehaviour
{
public GameObject[] sortableObjects; // ソート対象のオブジェクトを保持する配列

void Start()
{
    StartCoroutine(BubbleSortCoroutine());
}

IEnumerator BubbleSortCoroutine()
{
    int n = sortableObjects.Length;

    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            int currentValue = GetValue(sortableObjects[j]);
            int nextValue = GetValue(sortableObjects[j + 1]);

            // ソート対象の整数を比較して、必要に応じて入れ替える
            if (currentValue > nextValue)
            {
                SwapObjects(j, j + 1);
            }

            yield return new WaitForSeconds(1f); // ソートの過程を見やすくするために待機
        }
    }
}

int GetValue(GameObject obj)
{
// オブジェクトの名前から整数を取得
// 名前が "Square_1" のような形式であることを仮定しています。
string[] nameParts = obj.name.Split('_');
if (nameParts.Length == 2)
{
int value;
if (int.TryParse(nameParts[1], out value))
{
return value;
}
}

// デフォルトの値(何らかのエラーが発生した場合)
return 0;

}

void SwapObjects(int index1, int index2)

{
// 配列内の2つのオブジェクトを入れ替えるメソッド
GameObject temp = sortableObjects[index1];
sortableObjects[index1] = sortableObjects[index2];
sortableObjects[index2] = temp;

// オブジェクトの位置も入れ替える
Vector3 tempPosition = sortableObjects[index1].transform.position;
sortableObjects[index1].transform.position = sortableObjects[index2].transform.position;
sortableObjects[index2].transform.position = tempPosition;

// デバッグのためにオブジェクトの名前と座標をログに出力
Debug.Log("Swapped: " + sortableObjects[index1].name + " and " + sortableObjects[index2].name);
Debug.Log("New Positions: " + sortableObjects[index1].transform.position + " and " + sortableObjects[index2].transform.position);

}
}

Discussion