Maison >développement back-end >C++ >Comment pouvons-nous mélanger efficacement une liste d'entiers en C# ?

Comment pouvons-nous mélanger efficacement une liste d'entiers en C# ?

DDD
DDDoriginal
2025-01-21 14:02:14903parcourir

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

Algorithme de tri aléatoire efficace pour la liste d'entiers C#

Cet article explore un moyen plus efficace de trier ou de mélanger aléatoirement une liste d'entiers.

Algorithme de brassage Fisher-Yates

L'algorithme de brassage de Fisher-Yates est un algorithme en temps linéaire qui randomise efficacement les listes. Voici comment cela fonctionne :

Pour chaque index i dans la liste de 0 à n-1, procédez comme suit :

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

Améliorer les problèmes existants dans l'algorithme

L'algorithme proposé présente quelques lacunes :

  • Inefficacité à la fin : Au fur et à mesure que l'algorithme progresse, il devient de plus en plus difficile de trouver les éléments non échangés, conduisant à l'inefficacité.
  • Boucle infinie : Lorsque le nombre d'éléments est un nombre impair, l'algorithme ne se terminera pas car il ne trouve pas de candidat d'échange approprié.

Mise en œuvre du code

L'extrait de code suivant implémente l'algorithme de lecture aléatoire de Fisher-Yates en C# :

<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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn