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

Soyez le premier à donner votre avis sur cette source.

Vue 33 772 fois - Téléchargée 1 164 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

jcr39
Messages postés
1
Date d'inscription
dimanche 4 mars 2018
Statut
Membre
Dernière intervention
4 mars 2018

Une méthode de tri tout aussi efficace

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

void ordonnerTableau(int tableau[], int tailleTableau);
int main()
{
int tableau[4] = {15,81,22,13};

    ordonnerTableau(tableau, 4);

    return 0;
}

void ordonnerTableau(int tableau[], int tailleTableau)
{
    int i = 0; // Variable Index de boucle lecture tableau
    int d = 0 ; // Variable de décalage Index de boucle lecture tableau
    int tampon = 0;


           {
            printf("\nDEBUT exercice Ordonner\n\n");
            }

//Tri ordre croissant
{
    printf("\n tableau ordre Croissant\n");
}

  for(d=0; d < tailleTableau; d++)

        for(i=d; i < tailleTableau; i++)

            if (tableau [i]<= tableau [d])
            {
            tampon = tableau [d];
            tableau [d]= tableau [i];
            tableau [i] = tampon;
            }

        for(i=0; i < tailleTableau; i++)

            {
            printf("tableau: %i\n", tableau[i]);
            }

//Tri ordre décroissant
{
    printf("\n tableau ordre Décroissant\n");
}
    i = 0; // RAZ Variable Index de boucle lecture tableau pour tri decroissant
    d = 0 ; // RAZ Variable de décalage Index de boucle lecture tableau pour tri decroissant
    tampon = 0;


    for(d=0; d < tailleTableau; d++)
        for(i=d; i < tailleTableau; i++)

            if (tableau [i]>= tableau [d])
            {
            tampon = tableau [d];
            tableau [d]= tableau [i];
            tableau [i] = tampon;
            }


        for(i=0; i < tailleTableau; i++)

            {
            printf("tableau: %i\n", tableau[i]);
            }


            {
            printf("\nFIN exercice Ordonner\n");
            }

}
Thuzhen
Messages postés
2
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
17 mars 2010

Merci pour ces avis qui m'ont pas mal aidé :)
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 ;)
uaip
Messages postés
1466
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).
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.

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.