Rechercher : dans
Par :

Algorithme de tri rapide

Dernière réponse le 24 mar 2009 à 15:02:28 8412, le 23 mar 2009 à 14:16:05 
 Signaler ce message aux modérateurs

Salut ! J'ai un problème pour implémenter un algo de tri rapide : à partir du moment où j'ai 3 valeurs égales dans mon tableau, l'algorithme finit par tourner en boucle infinie... En effet, dès qu'une itération de cette valeur devient pivot, les 2 autres s'échangent à l'infini.

Comment remédier à ce problème en restant dans la logique du tri rapide ?

Merci d'avance...

Configuration: Windows XP
Firefox 3.0.7

Meilleures réponses pour « Algorithme de tri rapide » dans :
Tri Shell -Recursive- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri Shell : Procedure Tri_Shell_Rec (Var t: TAB; n,h : integer); Var aux,i : integer; begin If h > 0 Then Begin If n > h...
Tri à bulles -récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri à bulles : Procedure Tri_bulles (var t : TAB; n : integer); Var i, aux : integer; Function Trier (t : TAB; n : integer) : Boolean; ...
Remettre l'icône Bureau dans la barre de lancement rapide VoirRemettre l'icône Bureau dans la barre de lancement rapide Si l'icône du bureau n'est plus affichée dans le lancement rapide, cet article vous aidera à recréer ce raccourci. Fonction de l'icône Bureau Première méthode pour recréer le...
Télécharger Rapidos! VoirUn peu plus complet que iCarbon, Rapidos! permet aussi de transformer votre PC en photocopieuse, mais offre des fonctionnalités supplémentaires: Enregistrement de l'image dans un fichier, outils de recadrage, correction des couleurs, etc. Le...
Introduction à l'algorithmique VoirNotion d'algorithme La mise au point d'un programme informatique se fait en plusieurs étapes. Il s'agit de fournir la solution à un problème, la première étape consiste donc à analyser le problème, c'est-à-dire en cerner les limites et le mettre...
SQL - Tri VoirTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...

1

julplemet, le 23 mar 2009 à 14:22:01

Salut,
Sans voir le code, c'est un pti peu difficile... What don't kill you make you more strong

Répondre à julplemet

2

8412, le 23 mar 2009 à 14:30:52

def tri_rapide_interne(data, gauche, droite):

    if droite >= gauche:
        pivot = data[droite]
        i = gauche
        j = droite -1

        while True:
            while data[i] < pivot:
                i = i + 1
            while j > 0 and data[j] > pivot:
                j = j - 1
            if i >= j:
                break
            echanger(data, i, j)

        echanger(data, i, droite)

        tri_rapide_interne(data, gauche, i-1)
        tri_rapide_interne(data, i + 1, droite)

        return data

    return data


def tri_rapide(data, size):
    """Tri rapide
    """
    data = tri_rapide_interne(data, 0, size-1)
    return data


En effet, désolé... voilà le code.

Répondre à 8412

3

8412, le 23 mar 2009 à 20:36:12
  • +1

C'est bon, j'ai résolu mon problème. Pour ceux que ça intéresserait éventuellement un jour, il suffit d'incrémenter i (et décrémenter j) après l'échange de data[i] et data[j]. Ainsi, on échange jamais deux fois le même couple de valeurs. Merci quand même : p

Répondre à 8412

4

 julplemet, le 24 mar 2009 à 15:02:28

Parfait, tu peux mettre ton sujet en résolu. What don't kill you make you more strong

Répondre à julplemet
Collection CommentÇaMarche.net