C# 随机打乱数组

这篇具有很好参考价值的文章主要介绍了C# 随机打乱数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Fisher-Yates 洗牌算法是一种高效地将有限序列的元素进行随机洗牌的算法。这个算法在本地进行,不需要额外的内存开销。其基本思想是从最后一个元素开始,每次从未被选中的元素中随机选择一个与当前位置的元素交换,直到到达序列的开始。

这个算法的步骤如下:

  1. 从数组的最后一个元素开始,记为 n(数组长度)。
  2. 产生一个从 0 到 n(包含)的随机数 k。
  3. 将第 k 个元素和第 n 个元素交换。
  4. n 减 1,如果 n 不等于 0,则回到第 2 步。 这个算法的优点是每个元素在洗牌过程中都有相同的概率被放置在每一个位置。因此它能保证产生的结果是均匀随机的。 使用这个算法的代码已经在之前的消息中提供,你可以用 C# 语言中的 Random 类来生成所需的随机索引,并在你的数组或集合中应用该算法。

代码实现“文章来源地址https://www.toymoban.com/news/detail-835980.html

public static void Shuffle<T>(T[] array)
{
    Random rng = new Random();
    int n = array.Length;
    while (n > 1)
    {
        n--;
        int k = rng.Next(n + 1);
        T value = array[k];
        array[k] = array[n];
        array[n] = value;
    }
}
// 使用示例
int[] array = { 1, 2, 3, 4, 5 };
Shuffle(array);
// array现在是随机顺序的了

到了这里,关于C# 随机打乱数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】[LeetCode138. 复制带随机指针的链表]

    给你一个长度为  n  的链表,每个节点包含一个额外增加的随机指针  random  ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的  深拷贝 。 深拷贝应该正好由  n  个  全新  节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的  next  指针和

    2024年02月04日
    浏览(49)
  • 迷宫求解(包含随机迷宫、求解动画演示)——C语言 数据结构

    该程序是一项 “迷宫求解” 类问题,主要功能包含:         ①25 X 25迷宫的随机生成         ②迷宫求解的动画演示(DFS) 完整代码附最后 : ) 功能演示: 界面展示:  迷宫展示: 结果展示:   首先是随机迷宫部分: 大概思路就是先初始化一个矩阵,外圈为“通

    2024年02月07日
    浏览(65)
  • 【LeetCode】数据结构题解(9)[复制带随机指针的链表]

    所属专栏:玩转数据结构题型❤️ 🚀 博主首页:初阳785❤️ 🚀 代码托管:chuyang785❤️ 🚀 感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️ 🚀 博主也会更加的努力,创作出更优质的博文!!❤️ 🚀 关注我,关注我,关注我,重要的事情说三遍!!!!!

    2024年02月11日
    浏览(59)
  • 【数据结构】两两交换链表 && 复制带随机指针的链表

    给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 使用一个栈S来存储相邻两个节点即可 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以

    2024年04月15日
    浏览(49)
  • 数据结构——线性数据结构(数组,链表,栈,队列)

    数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。 数组的特点是: 提供随机访问 并且容量有限。 2.1. 链表简介 链表(LinkedList) 虽然是

    2024年02月11日
    浏览(44)
  • np.random.shuffle()+random.seed()设定随机种子,多次打乱,打乱规则固定

    在打乱数据集的时候遇到了这样一个问题:我有两组数据集,一组是image,一组是mask(语义分割任务,与本文无关),image和mask里都是图片,且一一对应,即 image里的第一张图片对应mask里的第一张图片 ,不能乱,因此打乱数据集的时候要对image和mask 以同样的顺序打乱 。 比

    2024年02月04日
    浏览(46)
  • MATLAB随机打乱矩阵(按行或列)

    2024年02月11日
    浏览(40)
  • 【算法 & 高级数据结构】树状数组:一种高效的数据结构(二)

    🚀 个人主页 :为梦而生~ 关注我一起学习吧! 💡 专栏 :算法题、 基础算法、数据结构~赶紧来学算法吧 💡 往期推荐 : 【算法基础 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理) 【算法基础】深搜 数据结构各内部排序算法总结对比及动图演示(插入排序

    2024年03月26日
    浏览(85)
  • 【算法 & 高级数据结构】树状数组:一种高效的数据结构(一)

    🚀 个人主页 :为梦而生~ 关注我一起学习吧! 💡 专栏 :算法题、 基础算法~赶紧来学算法吧 💡 往期推荐 : 【算法基础 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理) 【算法基础】深搜 树状数组 (Binary Indexed Tree,BIT)是一种数据结构,用于高效地处理

    2024年03月11日
    浏览(68)
  • 线性数据结构:数组、受限数组(栈、队列)、线性表

      数组(Array)是有序的元素序列。属于线性结构(有且仅有一个前驱、有且仅有一个后继)。   数组的关键在于在内存中的物理地址对应的是 一段连续的内存 。这意味着如果想要在任意位置删除/新增一个元素,那么该位置往后的所有元素,都需要往前挪/往后挪一个位

    2024年03月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包