ホームページ > バックエンド開発 > C++ > C# で整数リストを効率的にシャッフルするにはどうすればよいですか?

C# で整数リストを効率的にシャッフルするにはどうすればよいですか?

DDD
リリース: 2025-01-21 14:02:14
オリジナル
901 人が閲覧しました

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

C# 整数リストの効率的なランダム並べ替えアルゴリズム

この記事では、整数のリストをランダムに並べ替えたりシャッフルしたりするためのより効率的な方法を検討します。

フィッシャー・イェーツ シャッフル アルゴリズム

フィッシャー・イェーツのシャッフル アルゴリズムは、リストを効率的にランダム化する線形時間アルゴリズムです。仕組みは次のとおりです:

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート