Les Snippets

Connexion

Tri de nombres

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 18/07/2007 17:00:30 et initié par JMO [Liste]
Date de mise à jour : 11/12/2007 11:56:39
Vue : 9410
Catégorie(s) : Algorithme
Langages dispo pour ce code :
- VBScript
- Javascript
- C, C++
- VB 2005, VB.NET 1.x
- C# 2.x
- VB6, VBA
- ObjectiveCaml
- ObjectiveCaml



Langage : VBScript
Date ajout : 18/07/2007
Posté par JMO [Liste]
Call TriNombre(Array(2,8.99,4, 99.51,10,8.97,25,99.3, 8.96,24,100,12))
Sub TriNombre(MesNombres)
Dim imax, i, j, k, bpermute ,cprovisoire, liste
Dim Tableau() 
imax = 0
For i=0 to UBound(MesNombres)
    imax = imax + 1
    ReDim Preserve Tableau(imax)
    Tableau(imax) = MesNombres(i)
Next
bpermute = True                        
Do While bpermute = True              
   bpermute = False                  
   For j = 1 To imax - 1              
       If Tableau(j) > Tableau(j + 1) Then
          cprovisoire = Tableau(j)       
          Tableau(j) = Tableau(j + 1)      
          Tableau(j + 1) = cprovisoire  
          bpermute = True
       End If
   Next
Loop
'Affichage des nombres triés
For k = 1 To imax
    liste = liste & Tableau(k) &vbCrLf
    If k = imax Then MsgBox liste,,"Résultat trié" 
Next
End Sub
Remarque :
Pour un double, remplacer la virgule par un point
Langage : Javascript
Date ajout : 21/07/2007
Posté par bultez [Liste]

<script type="text/javascript">
function trinbr(a,b)
{    return a-b;    }
var tri=new Array(2,8.99,4, 99.51,10,8.97,25,99.3, 8.96,24,100,12);
tri.sort(trinbr);
for ( var n=0;n<tri.length;n++)    // afficher le résultat
{    document.write(tri[n]+" ");    }
</script>

Langage : C , C++
Date ajout : 25/07/2007
Posté par coucou747 [Liste]

void sortliste1(int unsigned *liste){
    //tri à bulles
    int i, j, a;
    for (i=0;i<L-1;i++){
        for (j=i+1;j<L;j++){
            if (liste[i]>liste[j]){
                a=liste[j];
                liste[j]=liste[i];
                liste[i]=a;
            }
        }
    }
}
void sortliste2(int unsigned *l1){
    //tri fusion
    int i, j, k, l, m, n, o=1;
    int unsigned l2[L];
    int unsigned *l3;
    int unsigned *l4;
    l3=l1;
    l4=l2;
    printf("Debut du tri...\n");
    for (i=0;i<L;i++){
        l2[i]=0;
    }
    for (i=2;i<L;i*=2){
        //la taille des parties à trier
        for (j=0;j<L;j+=i){
            //on parcourt les premiers éléments de nouvelle chaque parties.
            l=0;
            m=0;
            n=(i+j>L)?L-i:i;
            for (k=0;k<n;k++){
                if (m==o){
                    l4[j+k]=l3[j+l+o];
                    l++;
                }else if ( l==o ){
                    l4[j+k]=l3[j+m];
                    m++;
                }else if (l3[j+m]<l3[j+l+o]){
                    l4[j+k]=l3[j+m];
                    m++;
                }else{
                    l4[j+k]=l3[j+l+o];
                    l++;
                }
            }
        }
        if (l3==l2){
            l3=l1;
            l4=l2;
        }else{
            l3=l2;
            l4=l1;
        }
        o=i;
    }
    l=0;
    m=0;
    for (k=0;k<L;k++){
        if (m==o){
            l4[k]=l3[l+o];
            l++;
        }else if ( l==o ){
            l4[k]=l3[m];
            m++;
        }else if (l3[m]<l3[l+o]){
            l4[k]=l3[m];
            m++;
        }else{
            l4[k]=l3[l+o];
            l++;
        }
    }
    if (l4==l2){
        for (k=0;k<L;k++){
            l1[k]=l4[k];
        }
    }
}
void sortliste4(int unsigned *l1){
    //Cet algo de tri est l'algo de tri par insersion.
    int i, j, k, l;
    for (i=1;i<L;i++){
        l=l1[i];
        for (j=0;j<i;j++){
            if (l1[i]<l1[j]){
                for (k=i-1;k>j;k--){
                    l1[k+1]=l1[k];
                }
                l1[j]=l;
                break;
            }
        }
    }
}

Remarque :
voici trois algos de tris : tri fusion, tri a bulles, et tri par insertions.
si liste est un int unsigned [taille] alors :
sortliste1(liste);
fonctionne simplement
Langage : VB.NET 1.x , VB 2005
Date ajout : 02/08/2007
Posté par jrivet [Liste]
Public Function TriNombre(ByVal TabATrier As Single()) As String
        'Utilisation de la méthode Sort 
        Dim Result As String = String.Empty
        Call System.Array.Sort(TabATrier)
        'construction de lachaine de résultat
        For Each it As Single In TabATrier
            Result += it.ToString & vbNewLine
        Next
        Return Result
    End Function
Remarque :
(Je le reposte car la première fois je ne sais pas pourquoi mais il n'ai pas passé)
Ce code utilise les fonctionnalité .NET pour trier un tableau
Langage : C# 2.x
Date ajout : 06/08/2007
Posté par jrivet [Liste]
public string TriNombre(Single[] TabATrier)
{
     //utlisation de la méthode Sort 
     string result = string.Empty;
     System.Array.Sort(TabATrier);
     //Construction de la chaine de retour
     foreach (Single it in TabATrier)
     {
  result += it.ToString() + "\n";
     }
     return result;
}
Remarque :
équivalent de mon précédent Snippet mais pour C#
Langage : VB6 , VBA
Date ajout : 10/12/2007
Posté par us_30 [Liste]
DateMAJ : 11/12/2007

Sub QSort(t() As Long, Deb As Long, Fin As Long)
'TRI QUICKSORT RECURSSIF (TRI RAPIDE)

'Déclaration des variables
Dim i As Long         'indice
Dim j As Long         'indice
Dim X As Long         'valeur pivot
Dim Temp As Long      'Valeur temporaire


'Algo Tri
i = Deb   'sauve le début
j = Fin    'sauve la fin
X = t((i + j) \ 2)  'valeur pivot

Do
  Do While t(i) < X: i = i + 1: Loop 'recherche par la bas
  Do While t(j) > X: j = j - 1: Loop 'recherche par le haut

  If i <= j Then
    Temp = t(i)     'inversion t(i) et t(j)
    t(i) = t(j)
    t(j) = Temp
    i = i + 1       'Passe au suivant
    j = j - 1
  End If

Loop Until i > j

If j > Deb Then QSort t(), Deb, j   'trie par le bas
If i < Fin Then QSort t(), i, Fin   'trie par le haut

End Sub



Sub Test_Tri() 'PROGRAMME DE TEST 'Nb D'ELEMENTS Dim Nb As Long Nb = 10000 'Déclarations ReDim Tableau(Nb) As Long Dim t As Long Dim temps As Single 'LISTE ALEATOIRE Randomize Timer For t = 0 To Nb Tableau(t) = Int(Rnd * Nb) Next t 'LANCE TEST temps = Timer QSort Tableau(), 0, UBound(Tableau) Debug.Print Timer - temps End 'Vérification du tri For t = 0 To Nb     If t Mod 10 = 0 Then Debug.Print     Debug.Print Tableau(t); Next t End Sub
Remarque :
Cet algorithme QUICKSORT se révèle (et de loin) le plus rapide dans tous les cas, même quand la liste est quasiment triée, contrairement à ce qu'on peut lire parfois. Faites l'expérience avec Tableau(t) = t !
Langage : ObjectiveCaml
Date ajout : 09/02/2008
Posté par coucou747 [Liste]
let rec sort = function
    | []->[]
    | tete::[]->[tete]
    | tete::queue ->
        ( (sort (List.filter (function x -> x < tete) queue )) @ [tete]) @
          (sort (List.filter (function x -> x >= tete) queue ));;
Remarque :
c'est un qsort... Vous ne revez pas, en caml, on fait un qsort en 6 lignes... le defaut de ce qsort est qu'il prend le pivot au debut et non au centre.
Langage : ObjectiveCaml
Date ajout : 09/02/2008
Posté par coucou747 [Liste]

(*permet d'inserrer un element dans une liste deja triee*)
let rec inserer = function
    | (x, []) -> [x]
    | (x, tete::[]) -> if x < tete then [x;tete] else [tete;x]
    | (x, tete::queue) -> if x < tete then [x;tete] @ queue else [tete] @ inserer(x, queue);;
(* On peut alors definir le tri par insertion*)
let rec insertSort = function
    | [] -> []
    | tete::[] -> [tete]
    | tete::queue -> inserer(tete, insertSort(queue));;


Snippets en rapport avec : Tri, Nombre, Croissant, Décroisant



Codes sources en rapport avec : Tri, Nombre, Croissant, Décroisant

{Visual Basic, VB6, VB.NET, VB 2005} TRI COMPLEXE SUCCESSIF MULTI OPTION AVEC UNE MSHFLEXGRID
Tri complexe, rapide et simple à l'aide d'une MshFlexGrid. 4 colonnes successives possible : par exe...

{PHP} TRIE ET FILTRE UNIVERSEL DE REQUÊTES DANS UN FORMULAIRE À PARTIR DE SES CONTRÔLES
Voici un script, composé d'un fichier d'inclusion et d'une page de déclaration de variables, qui per...

{PDA / PocketPC} TRI D'UN TABLEAU DE VALEUR DANS L'ORDRE CROISSANT
Petit bout de code sans aucune prétention, pour que le site possède des algorithmes types, au mi...

{Visual Basic, VB6, VB.NET, VB 2005} CHIFFRE EN LETTRE FONCTION
Une petite fonction simlpe pour transformer un chiffre en lettre. Exemple: "15193" >> dix ...

{C# / C#.NET} LISTVIEW : TRI MONO OU MULTICOLONNES PROGRAMMÉ OU PAR CLICK DE COLONNE TENANT COMPTE DU TYPE DE DONNÉES À TRIER
Ayant pas mal cherché des sources pour faire des tris de colonnes de ListView, j'ai réalisé mon gest...

{Visual Basic, VB6, VB.NET, VB 2005} LISTE DE FICHIERS SUR UN DISQUE EN VB6
Ce programme permet de lister une arborescence de répertoires et de fichiers. Le résultat est mis ...

{PHP} FONCTION D'AFFICHAGE DE DONNÉES MYSQL
Cette fonction permet d'afficher des données provenant d'une ou plusieurs tables MySQL avec, si néce...

{PHP} COMPTER LE NOMBRE DE FICHIERS DANS UN DOSSIER
Après pas mal de recherche, je n'ai pas réellement trouvé un code qui me convenait. J'ai donc trouvé...

{Delphi} DÉCOUVRIR LE NOMBRE MYSTÈRE
Petit jeu tout simple développé par mes soins, il faut découvrir un nombre entier compris entre 1 et...

{Visual Basic, VB6, VB.NET, VB 2005} VACHE TAUREAU BY CHIHAOUI
Salut ! bref, un jeu populaire Vache Taureau! l'Ordi génère un nombre aléatoire et l'utilisateur ...