Algorithme de tri d'un tableau par ordre croissant ou décroissant.

Soyez le premier à donner votre avis sur cette source.

Vue 32 798 fois - Téléchargée 1 083 fois

Description

Bonjour,
Le code source que je vais présenter est simple mais on y pense pas tout le temps.
Il classe un tableau par ordre décroissant (ou croissant avec une petite modification). Il utilise un algorithme très simple que j'ai sorti de ma tête mais si il doit probablement déjà exister.

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>

void tri(int* tabl,int longueur);
int changer_pos(int *tabl1, int *tabl2);

int main()
{
    int n;
    int* numbers;
    int _i;

    scanf("%d\n", &n);
    numbers = calloc(n, sizeof(int));
    for(_i = 0; _i < n; ++_i)
        scanf("%d", &numbers[_i]);

    tri(numbers,n);

    for(_i=0;_i<n;++_i)
        printf("%d ",numbers[_i]);

    free(numbers);

    return 0;
}

void tri(int* tabl,int longueur)
{
    int i, _i;
    for(_i=0;_i<longueur;++_i)
    {
        for(i=0;i<longueur-1;i++)
        {
            if(tabl[i] > tabl[i+1])
            {
                changer_pos(&tabl[i],&tabl[i+1]);
            }
        }
    }
}

int changer_pos(int *tabl1, int *tabl2)
{
    int inter = 0;

    inter = *tabl1;

  • tabl1 = *tabl2;
  • tabl2 = inter;
}

Conclusion :


UTILISATION :

On rentre le nombre de données que nous allons entrer, puis on entre ces données qui vont ensuite être triées par ordre croissant.

PRINCIPE :

On compare le nombre de position i dans un tableau avec le nombre de position i+1 excepté si i est égal au nombre de donnés entrées dans le tableau.
Si le nombre de position i est plus grand, rien ne se passe, si c'est le contraire, ces deux nombres échangent leur position grâce à la fonction changer_pos().
Ces étapes se répètent autant de fois qu'il y a de nombres entrés.

REMARQUES :

On peut trier les nombres par ordre croissant en modifiant simplement le "if(tabl[i] < tabl[i+1])" en "if(tabl[i] > tabl[i+1])"
On peut inclure les nombres à virgule flottante (double) en modifiant la ligne de déclaration du tableau (remplacer int par double);

Voilà, j'espère que je vous ai aidé un peu et n'hésitez pas si vous avez une remarque ou un commentaire.
Informatiquement,
Thüzhen.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

gnairod
Messages postés
37
Date d'inscription
samedi 22 novembre 2008
Statut
Membre
Dernière intervention
11 avril 2010
-
C'est un tri à bulles, c'est sans intérêt dès lors que n > 7 car la complexité de l'algorithme est dans le cas moyen proportionnel à 1/2 * n^2, de plus il existe beaucoup de source sur cet algorithme. Essaye de proposer quelque chose avec plus d'intérêt. Je te mets la moyenne pour la note.
Thuzhen
Messages postés
2
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
17 mars 2010
-
C'est vrai que je pourrais l'optimiser en évitant la répétition de scan des nombres déjà classés, mais je pense que apars diminuer le temps d'exécution déjà très court ça ne servirait à rien. C'est vrai que la différence est visible au bout d'un certain moment mais bon...
Sur ce je te remercie de m'avoir donné le nom et d'avoir apport une critique objective.
Informatiquement,
Thüzhen.
Kevin95870
Messages postés
5
Date d'inscription
vendredi 6 novembre 2009
Statut
Membre
Dernière intervention
20 juin 2011
-
bonjour,

essai de regarder du côté des tris par distribution.
uaip
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Salut,
Gnairod m'a devancé quant au nom de tri à bulle.
Info : &tabl[i] devient tabl+i (à mon avis, c'est un détail parmi d'autre qui permet d'accélérer le temps d'exécution).
thebroyeur
Messages postés
7
Date d'inscription
dimanche 10 décembre 2006
Statut
Membre
Dernière intervention
8 mai 2010
-
Simple tri à bulle comme il a déjà été dit. Essaye de regarder les tri fusions par exemples merge sort en anglais ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.