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 :

détermination des indices initiaux d'un tableau après tri


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 116
    Par défaut détermination des indices initiaux d'un tableau après tri
    Bonjour,

    Le programme en c ci-dessous permet de trier les éléments d'un tableau t par ordre croissant.
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void selection(int *t, int n)
    {
         int i, min, j , x;
         for(i = 0 ; i < n-1 ; i++)
         {
             min = i;
             for(j = i+1 ; j < n ; j++)
     
                      if(t[j] < t[min])
                      min = j;
     
     
             if(min != i)
             {
                 x = t[i];
                 t[i] = t[min];
                 t[min] = x;
             }
         }
     
    }
     
     
    int main()
    {
       int k, min;
       int t[6]={3,6,9,10,1,2};
       selection(t, 6);
       for(k=0;k<6;k++)
       {
       printf("%d",t[k]);
     
       }
        return 0;
    }
    Mon souci ce que je voudrais récupérer les indices initiales des nombres du tableau trié.
    exemple :
    tableau non trié : 3 6 9 10 1 2
    tableau trié : 1 2 3 6 9 10
    indice : 4 5 0 1 2 3
    Je n'arrive pas à le faire. Un coup de pouce pourra m'aider!
    Merci

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Tu peux créer un tableau d'indices initialisé par 0, 1, 2, 3,...
    A chaque fois que tu effectues une permutation dans ta fonction de tri, tu effectues également la permutation des éléments homologues dans le tableau d'indices.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .....
                 x = t[i];
                 t[i] = t[min];
                 t[min] = x;
                 // permuter les éléments d'indices i et min dans le tableau d'indices

  3. #3
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    En regardant très rapidement ton code, je crois que les indices que tu cherches à conserver sont les valeurs successives de "min" quand tu arrives au test "min == i" (ai-je trouvé une valeur plus petite que la valeur courante ?). Ton algo les calcule donc déjà.

    Reste à choisir comment fournir à l'appelant (c'est bien ce que tu veux faire ?) les indices initiaux des valeurs que tu as triées.

    Tu peux, par exemple, passer un autre argument dans ta fonction "selection" (tableau d'int de même taille que ton tableau "t"), en pouvant même rafiner : ton argument est de type int * et, si l'appelant ne souhaite pas récupérer les indices, il passe "NULL", une adresse valide sinon).

    Tu peux aussi retourner le tableau d'indices (tableau que tu auras obligatoirement alloué, pour le coup, dans la fonction).

    Là, c'est à toi de décider.

    ps : message rédigé avant d'avoir vu la réponse de diogene - les 2 réponses ne sont pas contradictoires

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 116
    Par défaut
    Merci pour vos idées.
    Je suis encore perplexe

    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
    42
    43
    44
    45
    46
    47
    48
    49
    #include <stdio.h>
    #include <stdlib.h>
     
    void selection(int *t, int n, int *tab_indice)
    {
         int i, min, j , x, pos;
     
         for(i = 0 ; i < n-1 ; i++)
         {
             min = i;
             for(j = i+1 ; j < n ; j++)
     
                      if(t[j] < t[min])
                      min = j;
     
     
             if(min != i)
             {
                 x = t[i];
     
                 t[i] = t[min];
                 t[min] = x;
                 pos=tab_indice[i];
                 tab_indice[i]=tab_indice[min];
                 tab_indice[min]=pos;
     
     
             }
     
         }
     
    }
     
     
    int main()
    {
       int k;
     
       int t[6]={3,6,9,10,1,2};
       int tab_indice[6]={0; 1, 2, 3, 4, 5};
       selection(t,tab_indice, 6);
       for(k=0;k<6;k++)
       {
       printf("%d",t[k], tab_indice[k]);
     
     
       }
        return 0;
    }
    Chaque petite aide est la bienvenue

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void selection(int *t, int *tab_indice, int n) au lieu de void selection(int *t, int n, int *tab_indice)
    
    int tab_indice[6]={0, 1, 2, 3, 4, 5}; au lieu de    int tab_indice[6]={0; 1, 2, 3, 4, 5};
    
    et
    
    printf("%d %d\n",t[k], tab_indice[k]);
    
    pour mieux visualiser ton résultat.
    Tu n'avais pas essayé de compiler ?!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 116
    Par défaut
    le programme s'exécute mais ce n'est pas ce que je cherche.
    comment retourner le tableau d'indices?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut
    C'est exactement ce que fait ton programme maintenant. Mais il semble qu'il y ait un gros quiproquo sur ce que tu appelles "le tableau d'indices" et éventuellement "retourner le tableau d'indices".

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

Discussions similaires

  1. [WD-2010] Taille des colonnes d'un tableau après .Split
    Par arr37 dans le forum VBA Word
    Réponses: 6
    Dernier message: 14/08/2014, 16h38
  2. Recherche des indices min et max dans un tableau 2D
    Par Bysbobo dans le forum LabVIEW
    Réponses: 3
    Dernier message: 03/05/2013, 08h36
  3. Recuperer dans des variables le contenu des indices d' un tableau
    Par integrale dans le forum Général Python
    Réponses: 2
    Dernier message: 06/04/2013, 14h53
  4. récupérer les indices d'un tableau après le triage
    Par M77ATTAR dans le forum Débuter
    Réponses: 6
    Dernier message: 05/12/2012, 00h24
  5. Réponses: 12
    Dernier message: 05/06/2012, 10h36

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