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 : 24/06/2008 12:51:07
Vue : 32973
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
- Tcl



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

Langage : Tcl
Date ajout : 18/10/2012
Posté par gersoo [Liste]
lsort -real {2 8.99 4 99.51 10 8.97 25 99.3 8.96 24 100 12}


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



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

{C / C++ / C++.NET} TRANSFORMER UN ENTIER EN DEUX NOMBRES COMPOSÉ DES MEMES CHIFFRES ORDONNÉS PAR ORDRE CROISSANT ET DÉCROISSANT
Programme permettant de transformer un nombre en deux nombres composés des mêmes chiffres ordonnés d...

{C / C++ / C++.NET} ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROISSANT.
Bonjour, Le code source que je vais présenter est simple mais on y pense pas tout le temps. Il cla...

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

{Assembleur} MULTIPLIER POUR DIVISER, NOMBRES MAGIQUES
la division est lente par rapport a la multiplication. On va chercher a définir ce qu'est l'inver...

{PHP} HIT COUNTER
Titre: Hit counter Hit counter un exemple de code qui monter comment créer un visiteurs contrer av...

{Delphi} TRI ET PRÉSENTATION DE LISTBOX
Un exemple de tri et de présentation des listbox en utilisant les procedures Delphi. Quatre list so...

{Delphi} LE TRI PAR CASIERS
Le TRI PAR CASIERS ( bucket sort ) très simple et très rapide avait été snobé au début de la micro-i...