猿问

用.NET随机化数组的最佳方法

用.NET随机化数组的最佳方法

用.NET随机化字符串数组的最佳方法是什么?我的数组包含大约500个字符串,我想创建一个新的Array有相同的字符串,但顺序是随机的。

请在你的答案中包括一个C#例子。


慕标琳琳
浏览 629回答 3
3回答

汪汪一只猫

你在找洗牌算法对吧?好的,有两种方法可以做到这一点:clever-but-people-always-seem-to-misunderstand-it-and-get-it-wrong-so-maybe-its-not-that-clever-after-all方式,和愚蠢的石头-但谁在乎-因为它的工作方式。哑道创建第一个数组的副本,但是将每个字符串标记为一个随机数。根据随机数对重复数组进行排序。这个算法工作得很好,但是要确保随机数生成器不太可能用相同的数字标记两个字符串。因为所谓的生日悖论,这种情况发生的频率比你预期的要高。它的时间复杂度是O(n原木n).聪明之道我将其描述为递归算法:洗牌大小数组n(范围内的指数[0.n-1]):如果n = 0无所事事如果n > 0(递归步骤)洗牌n-数组的一个元素选择一个随机指数,x,在范围内[0.n-1]交换索引处的元素n-1,元素在索引处x迭代等价于遍历数组,在执行过程中用随机元素交换,但请注意,不能与元素交换。后迭代器指向的那个。这是一个非常常见的错误,并导致有偏见的洗牌。时间复杂度为O(n).
随时随地看视频慕课网APP
我要回答