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
Libérer: 2025-01-21 14:02:14
original
952 Les gens l'ont consulté

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>
Copier après la connexion

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

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));
    }
}
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal