Les Snippets

Connexion

Mélanger un tableau

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 22/03/2006 11:50:00 et initié par sebmafate [Liste]
Date de mise à jour : 28/03/2006 23:27:34
Vue : 19895
Catégorie(s) : Algorithme
Langages dispo pour ce code :
- C# 1.x, C# 2.x
- PHP 4, PHP 5
- Javascript
- VB 2005, VB.NET 1.x
- C# 1.x, C# 2.x
- Python
- Javascript
- VB6, VBA



Langage : C# 1.x , C# 2.x
Date ajout : 22/03/2006
Posté par sebmafate [Liste]

public class Melangeur : IComparer {
   private static Random rnd;
      static Melangeur() {
         rnd = new Random();
   }

   public int Compare(object x, object y) {
      if (Object.Equals(x, y))
         return 0;
      else {
         return rnd.Next(-1, 1);
      }
   }   
}

// Utilisation :
int[] toto = new int[16];
Array.Sort(toto, new Melangeur());


Langage : PHP 4 , PHP 5
Date ajout : 22/03/2006
Posté par malalam [Liste]

function Melangeur ($aTableau) {
  shuffle ($aTableau);

  return $aTableau;
}

Langage : Javascript
Date ajout : 22/03/2006
Posté par jesusonline [Liste]



if (!Array.prototype.duplicate) 
    Array.prototype.duplicate = function() { return [].concat(this);} 

if (!Array.prototype.sortRandom) 
    Array.prototype.sortRandom = function() { this.sort(function(elmt1, elmt2) { return ((2 * Math.round(Math.random())) - 1) }); } 

if (!Array.prototype.getRandomlySort)  
    Array.prototype.getRandomlySort= function() { return this.duplicate().sortRandom();} 

Langage : VB.NET 1.x , VB 2005
Date ajout : 23/03/2006
Posté par Nurgle [Liste]
Public Class Melangeur 
  Implements System.Collections.IComparer
  Private Shared rnd As Random 
  Shared Sub New()
      rnd = New Random() 
  End Sub

  Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare 
      If Object.Equals(x, y) Then
          Return 0 
      Else
          Return rnd.Next(-1, 1) 
      End If
  End Function 
End Class
 

' Et pour l'utiliser :
Dim Toto() As Integer = {1, 2, 5, 9, 10, 5, 3}
Array.Sort(Toto, New Melangeur())


Langage : C# 1.x , C# 2.x
Date ajout : 28/03/2006
Posté par coq [Liste]
DateMAJ : 28/03/2006

private static readonly Random _shuffleRnd = new Random(); // nécessaire pour la méthode ShuffleArray
public static void ShuffleArray(object[] array) 
{ 
    int arrayLength = array.Length; 
    // parcours de la liste en partant de la fin


    for (int i = arrayLength - 1; i > 1; --i) 
    {
        // tirage au sort d'un index entre 0 et la valeur courante de "i"
        int randomIndex = _shuffleRnd.Next(i); 
        // intervertion des éléments situés aux index "i" et "randomIndex"
        object temp = array[i]; 
        array[i] = array[randomIndex];
        array[randomIndex] = temp;
    }
}

Remarque :
Permet d'éviter le problème que l'on peut des fois rencontrer avec l'algo QuickSort utilisé par Array.Sort
Langage : Python
Date ajout : 29/10/2006
Posté par pacificator [Liste]
import random
listeAMelanger = range(50)
random.shuffle(liste)

Langage : Javascript
Date ajout : 13/03/2007
Posté par PetoleTeam [Liste]
//-------------------------------
// entree : le tableau a randommer
// sortie : le tableau randomme
//-------------------------------
function Rand_Tableau( tab_){
  var i;
  var Num;
  var Nbr = tab_.length;
  var Tab = tab_;
  //-- Lance la boucle
  while( Nbr> 0){
    //-- Recup nombre aleatoire
    Num = Math.floor(Math.random() * Nbr);
    //-- 1 de moins a traiter
    Nbr--;
    //-- Stock element tire
    szTmp = Tab[Num];
    //-- Decalage des valeurs du tableau
    for( i= Num; i < Nbr; i++)
      Tab[i] = Tab[i+1]
    //-- Stock l'element tire en fin
    Tab[ Nbr] = szTmp;
  }
  //-- On peut remettre dans l'ordre du tirage
  Tab.reverse();
  //-- Retourne resultat
  return( Tab);
}
EXEMPLE d'appel

  //-- Random du tableau
  Tab = Rand_Tableau( Tab);
Langage : VB6 , VBA
Date ajout : 12/05/2009
Posté par PCPT [Liste]
Function Shuffle(ByRef atData() As String)
' nécessite la fonction GetSingleValue
'  http://www.codyx.org/snippet_recuperer-aleatoirement-valeur-unique-tableau_348.aspx#1098
    Randomize Timer
    
    Dim atRet() As String, i As Integer, s As String
    ReDim atRet(LBound(atData) To UBound(atData))
    
    For i = LBound(atRet) To UBound(atRet)
        GetSingleValue atData, s
        atRet(i) = s
    Next i
    
    atData = atRet
    Shuffle = atRet
    Erase atRet
End Function
Remarque :
le tableau en paramètre doit être dimensionné dynamiquement

Snippets en rapport avec : Tableau, Melanger



Codes sources en rapport avec : Tableau, Melanger

{Visual Basic, VB6, VB.NET, VB 2005} COMPRESSION
Fonction pour comprimer un tableau de byte...

{Javascript / DHTML} FORMULAIRE TABLEAU
Ce script permet de créer un Quizz sous forme de tableau. Il faut un peu modifier le code pour pouvo...

{Javascript / DHTML} TABLE_SV : TABLEAU DYNAMIQUE, MONTRER/CACHER COLONNE SUR DEMANDE
'table_sv' : qu'est-ce que c'est ? Un script JS-dynamique qui permet à l'utilisateur de sélection...

{Visual Basic, VB6, VB.NET, VB 2005} JEU DE MÉMOIRE CLASSIQUE
C'est un jeu de mémoire ou il faut se souvenir de ce qui se cache derrière les cases. Un Timer est ...

{PHP} PAGINATION JAVASCRIPT PHP MYSQL
bonjour Un script qui s'adresse aux débutants qui veulent une pagination facile. Mélange deux deu...

{PHP} CRYPTAGE REVERSIBLE
Je vous propose une classe que j'ai crée il y a un moment pour crypter des mots de passe. Le but est...

{Visual Basic, VB6, VB.NET, VB 2005} DATATABLE EN MATRICE 2D
Je dépose cette petite source toute simple car je viens de trouver cette astuce pour extraire les ...

{Delphi} TABLEAU INFO SAVE INI
Pour mon 2eme projet, j'ai fait un programme qui utilise un fichier ini, en gros c'est un programme ...

{Visual Basic, VB6, VB.NET, VB 2005} RECHERCHE DES FICHIERS PAR LEURS NOMS
SearchFileByName.vbs : C'est un Vbscript pour rechercher des fichiers par leurs noms et générer le R...

{C / C++ / C++.NET} RÉSOLUTION SUDOKU (9X9) PAR BACKTRACKING RÉCURSIF INTELLIGENT
Résolution Sudoku (9x9) par backtracking récursif intelligent simplement Code original http://www....