C#对列表元素随机

这篇博客介绍了一个C#方法,用于创建一个新列表并进行随机排序,确保每个元素被放置在任意位置的概率均为1/n。代码中定义了`Swap`函数交换列表元素,然后在`RandomSort`函数中利用随机数生成器进行元素的随机位置交换,以此达到随机排序的效果。这种方法遵循了概率论中的原则,使得列表中的每个位置对所有元素来说都是等概率的。

C#中的代码如下:

public static void Swap<T>(List<T> array, int i, int j)
        {
            T temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }

        public static List<T> RandomSort<T>(List<T> list)
        {
            System.Random random = new System.Random();
            var newList = new List<T>(list);
            int listLength = newList.Count;
            for(int idx=0; idx< listLength; idx++)
            {
                int randomIdx = random.Next(idx, listLength);
                Swap<T>(newList, idx, randomIdx);
            }
            return newList;
        }

传入一个随机列表,在函数中回新建一个一样的列表,目的是为了不打乱传进来的列表,主要思路可以这么简单理解:比如有一个长度为N的数组,对于某一个数X出现在第一个位置上的概率为 1/n;对于整数X出现在第二个位置上的概率为(不出现在第一个位置,并且出现在第二个位置):
在这里插入图片描述
所以这样做,能让每一次个数被拿到的概率都是1/n,达到数学上的随机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值