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

Algorithmes et structures de données Discussion :

Tri de chaînes contenant des nombres


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Par défaut Tri de chaînes contenant des nombres
    Bonjour,

    Je cherche un algo permettant de trier des chaînes contenant des nombres.
    ATTENTION : les nombres doivent être triés en tant que nombres et pas caractères numériques :
    En gros ce serait pour reconstituer le tri de l'explorateur sous Windows XP.

    Un exemple de chaînes à trier :
    Dossier toto (2)
    Dossier toto (10)
    Dossier toto (1)

    Le résultat à obtenir :
    Dossier toto (1)
    Dossier toto (2)
    Dossier toto (10)

    et non pas
    Dossier toto (1)
    Dossier toto (10)
    Dossier toto (2)

    Rq : Je ne sais pas si la chaîne comporte des nombres, je ne connais pas leur emplacement etc...
    Le tri en lui même, il n'y a pas de problèmes, c'est trouver la formule pour calculer la chaîne correcte qui me pose problèmes.

    Merci de votre aide précisieuse.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Dans le cas que tu montres, c'est assez simple: tu tries les chaînes en fonction de leurs longueurs (=nombre de caractères), et si elles ont la même longueur tu tries par ordre lexicographique (=comparaison standard de chaînes).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Par défaut
    Oula !!!
    Ce n'est pas si simple, les chaînes sont quelconques.
    Allez je me m'étais égaré à faire un exemple facile, compliquons un tout petit peu la chose :

    à trier :
    toto200est_une_chaine
    toto199est_court
    toto198est_par_contre_super_long
    toto32_et_5_comporte_deux nombres
    toto32_et_10_comporte_deux_nombres
    toto32_et_00006_comporte_deux_nombres

    donne :
    toto32_et_5_comporte_deux nombres
    toto32_et_00006_comporte_deux_nombres
    toto32_et_10_comporte_deux_nombres
    toto198est_par_contre_super_long
    toto199est_court
    toto200est_une_chaine

    Pour info, créez les répertoires comme ci-dessus, vous verrez, Windows XP les classes comme je veux... Il est terrible ce XP ^^

    Dans ma recherche j'ai essayé de transformer la chaine en un nombre de la manière suivante :
    "AB" est transformé en 6566
    "10" est transformé en 10
    ...
    AB245C serait donc transformé en 656624567
    mais ça ne marche pas, A65A serait égal à AAA (656565)
    par contre A2B serait bien trié par rapport à A10B (65266 < 651066)

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Ah... c'est sur que c'est plus compliqué.

    Il faudrait séparer ta chaine en groupes de caracteres alpha et numeriques et ensuite comparer groupe par groupe suivant tes règles de tris:
    - comparaison de 2 groupes alpha : ordre lexico
    - comparaison de 2 groupes numeriques : conversion + ordre naturel
    - comparaison alpha / numérique : a toi de voir

    phrase #1 : [toto][198][est_par_contre_super_long]
    phrase #2 : [toto][32][_et_][5][_][comporte_deux nombres]

    Comparaison groupe 1
    [toto] / [toto] -> identique

    Comparaison groupe 2
    [198] / [32] -> 32<198 -> phrase #2 avant phrase #1
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Par défaut
    Effectivement ça va marcher...
    Il faut implémenter la comparaison de 2 lignes en décomposant groupes par groupes.
    J'aurais préféré transformer les lignes pour lancer un tri classique (le but était une implantation dans des requêtes SQL), mais bon, ça devrait passer quand même...

    Merci beaucoup pseudocode !!!

    PS : faut faire gaffe à la comparaison "toto" et "123", faut décomposer en [toto] et [][123] donc comparer "toto" à ""

  6. #6
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par Isineac Voir le message
    J'aurais préféré transformer les lignes pour lancer un tri classique (le but était une implantation dans des requêtes SQL), mais bon, ça devrait passer quand même...
    Tu pourrais simplement transformer les nombres en séquences de caractères, pour ça il faut que tu connaisses la taille de ton plus grand nombre (pour les faire tous de la même taille), mais ensuite c'est une tâche facile.

    --
    Jedaï

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/03/2013, 13h26
  2. Tri varchar contenant des nombres et des lettres
    Par ben106 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/08/2007, 21h58
  3. Utilisation de variable contenant des nombres a virgule en SQL
    Par Rukawa dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 27/10/2006, 18h54
  4. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52
  5. [VBA-E]Plage contenant des nombres et du texte
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2006, 18h33

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