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

2962

被折叠的 条评论
为什么被折叠?



