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 :

Problème implémentation quiksort générique.


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 28
    Points : 38
    Points
    38
    Par défaut Problème implémentation quiksort générique.
    Bonjour tout le monde, j'étudie le C et un exercice me bloque, voici :
    Je dois programmer un tri rapide (quicksort) de manière générique sa déclaration est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quicksort(void *array,int numberElem,int size, int *cmp(void*,void*));
    Pour effectuer mes tests je possède un tableau d'entier généré aléatoirement.
    J'ai dans un premier temps du effectuer un tri rapide uniquement sur ce tableau d'entier, je posséde donc un tri rapide pour tableau d'entier que j'essaye d'adapter de manière générique.

    Voici le début de mon code de quicksort générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void
    quicksort
    (void *array, int numberElem, int size,int(*cmp)(const void * a, const void * b))
    {
      char *localA=(char *) array;
      int haut=0;
    }
    Ma question est la suivante :
    Sachant que je converti le void en char et que je connais la taille d'un entier (4) je vais donc comparer les cellules en accédant a leur indices de la manières :
    localA+i*size

    Mais en comparant les cases du tableau de char 1 par 1 il se peut que le chiffre entier réellement représenté par les 4 char consécutif sois plus grand que celui représenté par les 4 autres char comparé ?

    J'espère avoir été clair , merci pour votre future aide !

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par Realc Voir le message
    Sachant que je converti le void en char et que je connais la taille d'un entier (4) je vais donc comparer les cellules en accédant a leur indices de la manières :
    localA+i*size

    Mais en comparant les cases du tableau de char 1 par 1 il se peut que le chiffre entier réellement représenté par les 4 char consécutif sois plus grand que celui représenté par les 4 autres char comparé ?

    J'espère avoir été clair , merci pour votre future aide !
    Non.
    Le ieme élément est à l'adresse localA + i * size, oui. Ensuite pourquoi vouloir comparer des cases de tableau char par char? La fonction passée en paramètre doit savoir quoi faire des 2 adresses qu'elle reçoit, ce sont les adresses de 2 objets qu'elle sait comparer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int comparer( void* x , void* y ) {
       // par exemple : je sais que se sont des int
       return *(int*)x < *(int*)y;  // j'ai reçu l'adresse, il reste à faire le bon cast
       // par exemple : je sais que se sont des chaînes de caractères de taille connue
       return strcmp( (const char*)x , (const char*)y );
    }

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 28
    Points : 38
    Points
    38
    Par défaut Solution
    Merci ! Ca fonctionne, il fallait juste mettre des int a la place de char dans ma fonction de comparaison car je ne travaillais plus avec de petit nombre et donc j'avais dépassé les 127 bits de l'octet, donc le problème venait de ma fonction de comparaison et non de mon quicksort.

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

Discussions similaires

  1. Problème d'implémentation: héritage, génériques, ou autres
    Par tibo007 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 27/02/2014, 19h01
  2. Problème utilisation typage générique ArrayList
    Par benoît_deville dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 12/04/2008, 14h13
  3. Problème de Cast générique
    Par pcayrol dans le forum C#
    Réponses: 14
    Dernier message: 24/01/2008, 15h02
  4. Réponses: 14
    Dernier message: 05/04/2007, 11h12
  5. [STRUTS][TILES] Problème sur actions génériques
    Par xv-mnt dans le forum Struts 1
    Réponses: 1
    Dernier message: 02/08/2005, 10h15

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