Fisher-Yates Shuffle算法
1.创建一个新的list
2.随机取出当前0-list.Count其中一个数
3.把老list当前随机数位置添加到新list
4.老list删除这个数
5.直到老list.Count=0结束返回
public void FisherYatesShuffle(List list)
{
List cache = new List();
int currentIndex;
while (list.Count > 0)
{
currentIndex = Random.Range(0, list.Count);
cache.Add(list[currentIndex]);
list.RemoveAt(currentIndex);
}
for (int i = 0; i < cache.Count; i++)
{
list.Add(cache[i]);
}
}
随机性 可验证每一个数的概率都是相等的
一个元素m被放入第i个位置的概率P = 前i-1个位置选择元素时没有选中m的概率 * 第i个位置选中m的概率