首页 >后端开发 >C++ >我们如何在 C# 中有效地打乱整数列表?

我们如何在 C# 中有效地打乱整数列表?

DDD
DDD原创
2025-01-21 14:02:14902浏览

How Can We Efficiently Shuffle an Integer List in C#?

C#整数列表的高效随机排序算法

本文探讨一种更高效的随机排序或洗牌整数列表的方法。

Fisher-Yates洗牌算法

Fisher-Yates洗牌算法是一种线性时间算法,可以高效地随机化列表。其工作原理如下:

对于列表中从0到n-1的每个索引i,执行以下操作:

<code>int j = random.Next(i + 1);
交换索引i和j处的数值;</code>

改进算法中存在的问题

所提出的算法存在一些缺点:

  • 结尾效率低下:随着算法的进行,找到未交换的元素变得越来越困难,导致效率低下。
  • 无限循环:当元素个数为奇数时,由于无法找到合适的交换候选者,算法将无法终止。

代码实现

以下代码片段在C#中实现了Fisher-Yates洗牌算法:

<code class="language-csharp">using System;
using System.Collections.Generic;

class Program
{
    static void Shuffle<T>(IList<T> list)
    {
        Random random = new Random();

        for (int i = 0; i < list.Count; i++)
        {
            int j = random.Next(i + 1);
            T temp = list[i];
            list[i] = list[j];
            list[j] = temp;
        }
    }

    static void Main(string[] args)
    {
        List<int> values = new List<int>();
        for (int i = 0; i < 10; i++)
        {
            values.Add(i);
        }

        Shuffle(values);

        Console.WriteLine(string.Join(", ", values));
    }
}</code>

以上是我们如何在 C# 中有效地打乱整数列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn