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

Python Discussion :

problème Quick sort


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 126
    Points : 48
    Points
    48
    Par défaut problème Quick sort
    Bonjour,

    Je remercie par avance tous ceux qui s'intéresseront à mon problème.

    Voici mon code :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    # *-coding:Utf-8 -*
    import random
     
    def swap(A, i, j):
        temp = A[i]
        A[i] = A[j]
        A[j] = temp
     
    def chosePivot(A):
     
        return A[random.randint(0, len(A)-1)]
     
     
    def partition(A, p):
     
        swap(A, 0, A.index(p))
     
        i = 1
        j = 1
     
        while j < len(A):
            if A[j] < p:
                swap(A, i, j)
                i += 1
            j += 1
        swap(A, 0, i-1)
     
        return A.index(p)
     
    def quickSort(A):
     
        if len(A) <= 1:
            return A
     
        p = chosePivot(A)
     
        r = partition(A, p)
        quickSort(A[:r])
        quickSort(A[r+1:])
     
        return A
    Ma fonction partition fait le travail comme il faut, et les appels récursifs se font sur les bons sous-tableaux, mais au moment de "raccrocher" tout le monde, j'obtiens n'importe quoi. Quelqu'un peut-il m'expliquer pourquoi ma récursion échoue ?

    Merci

    Immo

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je te propose une petite expérience :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> a = [1,2,3]
    >>> b = a[:2]
    >>> b
    [1,2]
    >>> b[0] = 100
    >>> b
    [100,2]
    >>> a
    [1,2,3]
    As-tu maintenant une idée d'où vient ton problème ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 126
    Points : 48
    Points
    48
    Par défaut
    Ton expérience semble montrer que lorsque je fais un appel récursif sur un sous-tableau de mon tableau principal, les changements ne sont pas appliqués au tableau d'origine, il faut donc reconstruire ce tableau ?

    Dans mon cas je pourrai faire return quickSort(A[:r])+[A[A.index(p)]]+quickSort(A[r+1:])

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par ImmoTPA Voir le message
    Ton expérience semble montrer que lorsque je fais un appel récursif sur un sous-tableau de mon tableau principal, les changements ne sont pas appliqués au tableau d'origine,
    Bien vu.

    Citation Envoyé par ImmoTPA Voir le message
    il faut donc reconstruire ce tableau ?
    C'est une possibilité (inefficace), ou sinon, ton quickSort pourrait prendre des paramètres 'start' et 'end' en plus lui indiquant de ne trier que les éléments aux indices entre 'start' et 'end' (mais ça te complique la tâche, tout dépend donc de l'objectif).

    Citation Envoyé par ImmoTPA Voir le message
    Dans mon cas je pourrai faire return quickSort(A[:r])+[A[A.index(p)]]+quickSort(A[r+1:])
    Un truc comme ça... Mais [A[A.index(p)]] est une façon singulièrement inefficace de dire [p] !

    --
    Jedaï

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 126
    Points : 48
    Points
    48
    Par défaut
    Oui en effet, un peu crevé à cette heure jfais n'importe quoi. merci de ton aide à bientôt

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

Discussions similaires

  1. problème avec sort() et operator<
    Par [Hugo] dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2008, 18h19
  2. Problème de sort de vectors..
    Par strayyy dans le forum SL & STL
    Réponses: 13
    Dernier message: 05/01/2008, 04h36
  3. Problème quick report
    Par yassou dans le forum Outils
    Réponses: 3
    Dernier message: 13/07/2007, 18h07
  4. problème évènement sorting
    Par babafredo dans le forum ASP.NET
    Réponses: 5
    Dernier message: 04/07/2007, 09h32
  5. Problème avec Sort() sur un TList
    Par ViNzZz dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/08/2006, 14h45

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