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的数组,第一次随机拿一个,然后每一个元素被拿到的概率为 1/n; 当我们在剩下的n-1个中再随机去一个,此时的概率为 所以这样做,能让每一次个数被拿到的概率都是1/n,达到数学上的随机。
|