IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Tri à bulle optimisé


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut Tri à bulle optimisé
    Bonjour

    J'ai vu un tri à bulle sur les sources C : http://c.developpez.com/sources/?pag...THME_tri_bulle
    Pour moi, ce tri n'est absolument pas optimisé ! Même pour un tri à bulle !

    Je proposerais, avec chaine, la liste à trier et l sa longueur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    for (i=0;i<l-1;i++)
    {
        j_max=i;
        c_max=chaine[i];
        for (j=i+1;j<l;j++)
        {
            if (chaine[j]<c_max)
            {
                j_max=j;
                c_max=chaine[j];
            }
        }
        chaine[j_max]=chaine[i];
        chaine[i]=c_max;
    }
    En gros, je cherche le plus petit, je le mets devant en échangeant sa place avec celui de devant et je recommence , mais en commençant une case plus loin.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par troumad Voir le message
    Bonjour

    J'ai vu un tri à bulle sur les sources C : http://c.developpez.com/sources/?pag...THME_tri_bulle
    Pour moi, ce tri n'est absolument pas optimisé ! Même pour un tri à bulle !
    Salut

    Le principe du tri à bulle est le suivant: on balaye le tableau et chaque fois qu'un élément n'est pas à sa bonne place par rapport à celui qui le suit ben on les permutes.
    Et on recommence la boucle tant qu'il y a eu au-moins une permutation. Personne n'a jamais prétendu qu'un tri à bulle était optimisé...

    Il existe d'ailleurs le tri à bulle dit "optimisé" où on mémorise la position de la première permutation de la boucle. Et à la boucle suivante on ne repart que de cette position. Ca améliore "un peu" les perfs mais c'est que dalle par rapport aux algos comme quicksort...

    Citation Envoyé par troumad Voir le message
    Je proposerais, avec chaine, la liste à trier et l sa longueur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    for (i=0;i<l-1;i++)
    {
        j_max=i;
        c_max=chaine[i];
        for (j=i+1;j<l;j++)
        {
            if (chaine[j]<c_max)
            {
                j_max=j;
                c_max=chaine[j];
            }
        }
        chaine[j_max]=chaine[i];
        chaine[i]=c_max;
    }
    En gros, je cherche le plus petit, je le mets devant en échangeant sa place avec celui de devant et je recommence , mais en commençant une case plus loin.
    L'optimisation d'un tri se mesure selon sa complexité (le nombre d'itérations). J'ai pas regardé en détail ton code et son fonctionnement mais étant donné qu'il y a 2 boucles imbriquées où chaque boucle balaye le tableau, ça donne un ordre de grandeur, pour un tableau de N éléments, de N² itérations (attention, il s'agit ici d'un ordre de grandeur et non d'une valeur exacte). Et donc ton algo a malheureusement la même complexité que celle du tri à bulles...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ce que tu proposes est, sauf erreur de ma part, l'algorithme proposé dans le source qui précède immédiatement celui du tri à bulle : Tri par maximum

  4. #4
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par diogene Voir le message
    Ce que tu proposes est, sauf erreur de ma part, l'algorithme proposé dans le source qui précède immédiatement celui du tri à bulle : Tri par maximum
    Il me semble aussi !
    J'avais toujours cru que comme ça, je faisais du tri par bulle ! L'intérêt du tri par maximum plutôt que du tri par bulle, c'est qu'on limite le nombre d'affectation.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par troumad Voir le message
    J'avais toujours cru que comme ça, je faisais du tri par bulle ! L'intérêt du tri par maximum plutôt que du tri par bulle, c'est qu'on limite le nombre d'affectation.
    Ce que tu proposes est un tri par sélection (aussi appelé tri par extraction).

    Citation Envoyé par Sve@r Voir le message
    L'optimisation d'un tri se mesure selon sa complexité (le nombre d'itérations). J'ai pas regardé en détail ton code et son fonctionnement mais étant donné qu'il y a 2 boucles imbriquées où chaque boucle balaye le tableau, ça donne un ordre de grandeur, pour un tableau de N éléments, de N² itérations (attention, il s'agit ici d'un ordre de grandeur et non d'une valeur exacte). Et donc ton algo a malheureusement la même complexité que celle du tri à bulles...
    C'est effectivement du O(n²) comme le tri à bulle mais il a l'avantage, comme le fait remarquer troumad, de ne nécessité que peu d'échange, ce qui peut être intéressant dans certain cas.
    Par contre, sur des ensembles déjà triés ou quasiment triés, il reste en O(n²) alors que la complexité du tri à bulle chute dans ces cas particuliers.

  6. #6
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Merci pour vos explications.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri bulle, insertion, rapide
    Par jcaspar dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2007, 12h58
  2. tri bulle (setValueAt )
    Par ghotique dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 28/06/2007, 19h42
  3. quelle instruction pour un tri à bulles?
    Par bandit_debutant dans le forum Langage
    Réponses: 2
    Dernier message: 30/11/2006, 07h16
  4. besoin d aide et de vrification algo tri bulle
    Par dju.ly dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 30/12/2005, 13h04
  5. Tri à bulle - Affichage de sprite
    Par Gory dans le forum Assembleur
    Réponses: 5
    Dernier message: 10/03/2005, 15h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo