用C#写一个随机排序

在 C# 中实现随机排序,通常可以使用 System.Random 类来打乱数组或列表中元素的顺序。这里有一种常见的方法是使用 Fisher-Yates 洗牌算法,这种算法既高效又公正,确保每个元素随机且公平地被选中。

下面是如何用 C# 实现 Fisher-Yates 随机排序算法的一个示例:

using System;

public class Program
{
    public static void Main()
    {
        // 初始化数组
        int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        
        // 打印原始数组
        Console.WriteLine("原始数组: " + string.Join(", ", array));
        
        // 随机排序数组
        RandomShuffle(array);
        
        // 打印随机排序后的数组
        Console.WriteLine("随机排序后的数组: " + string.Join(", ", array));
    }

    // Fisher-Yates随机排序算法
    private static void RandomShuffle(int[] array)
    {
        Random rand = new Random();
        int n = array.Length;
        for (int i = n - 1; i > 0; i--)
        {
            // 随机选取一个小于等于i的数
            int j = rand.Next(i + 1);
            
            // 交换元素
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
}

代码解释:

1、初始化和打印原始数组:首先定义一个整数数组并打印出来。

2、定义RandomShuffle方法:该方法接受一个整数数组作为参数。

3、生成随机数:使用System.Random类生成随机数。

4、循环和交换:通过循环遍历数组元素,每次循环中,随机选择一个索引并与当前索引的元素交换。这个过程从数组的末尾开始,一直到第二个元素停止。

这样,每个元素都有均等的机会被排到任何一个位置,确保了排序的随机性。这种方法的时间复杂度为 O(n),适合处理大型数组。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单的排行榜实现,基于Unity的UI组件和C#脚本: 1. 首先,创建一个UI面板作为排行榜页面。在面板上添加一个滚动视图(Scroll View)和一个垂直布局组件(Vertical Layout Group)。 2. 在滚动视图中创建一个排行榜项的预制体,包括玩家名称、分数等信息。将预制体作为子对象添加到垂直布局组件中。 3. 创建一个脚本,用于管理排行榜数据和UI。该脚本需要实现以下功能: - 读取玩家数据,包括名称和分数。 - 根据分数对玩家进行排序。 - 将排行榜项预制体进行实例化,并设置对应的玩家数据。 - 将实例化的预制体添加到垂直布局组件中,以显示在滚动视图中。 下面是一个简单的示例代码: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class LeaderboardManager : MonoBehaviour { public GameObject leaderboardItemPrefab; public Transform content; private List<PlayerData> playerDataList = new List<PlayerData>(); private void Start() { // 读取玩家数据,这里使用随机数据代替 for (int i = 0; i < 10; i++) { PlayerData playerData = new PlayerData(); playerData.name = "Player " + i; playerData.score = Random.Range(0, 100); playerDataList.Add(playerData); } // 根据分数对玩家进行排序 playerDataList.Sort((x, y) => y.score.CompareTo(x.score)); // 实例化排行榜项,并设置对应的玩家数据 foreach (PlayerData playerData in playerDataList) { GameObject item = Instantiate(leaderboardItemPrefab, content); item.transform.SetParent(content, false); item.transform.Find("Name").GetComponent<Text>().text = playerData.name; item.transform.Find("Score").GetComponent<Text>().text = playerData.score.ToString(); } } } public class PlayerData { public string name; public int score; } ``` 4. 将脚本挂载到排行榜页面的UI面板上,然后将滚动视图和垂直布局组件分别拖拽到脚本中对应的变量中。 5. 将排行榜项预制体创建并保存到项目中,在脚本中设置对应的变量。 6. 运行游戏,即可看到排行榜页面并显示玩家数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值