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

Java Discussion :

Quel algorithme de tri est utilisé avec Comparator


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut Quel algorithme de tri est utilisé avec Comparator
    Bonjour,

    Savez vous quel algorithme est utilisé lorsqu'on met en place la fonction compareTo sur un objet (tri rapide, tri Shell, etc)
    Par curiosité, dans les autres langages le savez vous aussi ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    En java c'est un algo de type merge sort.
    De souvenir en C# c'est un quicksort.
    Python fait du timsort.

    Pour les autres, je n'en sais rien.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    En même temps Comparator et compareTo() ne trient rien du tout. Ils comparent deux éléments l'un à l'autre. Deux. Pas plus, pas moins.

    Ils sont appelés par l'algorithme qui se charge de trier (et ça peut être n'importe lequel. Collections.sort() utilise en effet un merge sort.)

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 659
    Points
    2 659
    Par défaut
    Tu peux toujours allez voir dans le code source, même si ce n'est pas simple à comprendre.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Citation Envoyé par deathness Voir le message
    Tu peux toujours allez voir dans le code source, même si ce n'est pas simple à comprendre.
    Pas besoin, la JavaDoc indique ce genre de choses elle-même, pour qu'on puisse évaluer la complexité de l'algorithme.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    Je n'ai rien vu de tel dans la javadoc, pourtant j'ai cherché à Collections et Arrays

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 659
    Points
    2 659
    Par défaut
    Si c'est précisé dans la description de la méthode sort par exemple:
    This algorithm offers guaranteed n log(n) performance.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 524
    Points
    524
    Par défaut
    Oui, le type d'algo est dans la javadoc, un peu plus haut que le "n log(n)"
    * The sorting algorithm is a modified mergesort (in which the merge is
    * omitted if the highest element in the low sublist is less than the
    * lowest element in the high sublist). This algorithm offers guaranteed
    * n log(n) performance.
    et en regardant la source en jdk6, qui est en fait dans Arrays.sort, on voit que la limite de MergeSort à insertion est à 7, donc ça trie par groupe de 7 elements maximum en tri par insertion, puis ensuite en mergesort pour les tailles supplémentaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        /**
         * Tuning parameter: list size at or below which insertion sort will be
         * used in preference to mergesort or quicksort.
         */
        private static final int INSERTIONSORT_THRESHOLD = 7;

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    C'est curieux tout de même je pensais que le tri rapide était toujours meilleur que le tri fusion. Il y a d'ailleurs une variante Sedgesort à ce tri qui j'avais cru comprendre était la meilleure de toutes

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Ça dépend ce qu'on appelle meilleur. Le tri fusion est stable, le tri rapide ne l'est pas.
    Dans les deux cas la complexité est en moyenne n log n, le tri rapide l'est juste plus souvent.

    Personnellement j'aurais pas dit non à un mécanisme pour choisir son algo de tri, pour les cas par exemple où on s'en tape de la stabilité, ou bien où elle n'a pas de sens.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/12/2013, 01h59
  2. [OCCI] Quel version de gcc est compatible avec les librairies OCCI de Oracle 10 ?
    Par philemon_siclone dans le forum Interfaces de programmation
    Réponses: 4
    Dernier message: 09/01/2009, 20h24
  3. Déterminer quel générateur d'état est utilisé
    Par pi_hellz dans le forum Autres outils décisionnels
    Réponses: 3
    Dernier message: 22/08/2007, 17h20
  4. Quel est le meilleur SGBD utilisé avec JAVA
    Par osma_1978 dans le forum JDBC
    Réponses: 6
    Dernier message: 08/06/2007, 20h17
  5. Quel algorithme utilisé pour faire un arbre hiérarchique
    Par deaven dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/01/2005, 21h30

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