首頁 >後端開發 >C++ >我們如何在 C# 中有效地打亂整數列表?

我們如何在 C# 中有效地打亂整數列表?

DDD
DDD原創
2025-01-21 14:02:14953瀏覽

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