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

Discussion: Tri de tableau

  1. #1
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2018
    Messages : 17
    Points : 21
    Points
    21

    Par défaut Tri de tableau

    Bonjour,

    Je bloque en ce moment sur un tri de tableau sans la méthode .sort. ça fait un petit moment que j'y réfléchi et je ne trouve pas mon erreur.
    ça doit être très simple !!!! le tri doit être 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
    function sortNumbers (arr) {
       let newArr = arr;
       let temp = arr;
        for(let i=0; i<arr.length;i++){
            for(let j=0; j<arr.length;j++){ 
              if (arr[i] > newArr[j]){
                  temp = arr[i]
                  arr[i] = newArr[j];
                  newArr[j] = temp;
                }
              }
              return console.log(newArr);
            }
          }
      
      
     
    /*
      Test 1
      Résultat attendu : [2, 3, 4, 5]
    */
    sortNumbers([4, 3, 5, 2]);
    
    /*
      Test 2
      Résultat attendu : [-10, 2, 10, 28]
    */
    sortNumbers([10, 2, 28, -10]);
    et la réponse que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Debugger attached.
    Waiting for the debugger to disconnect...
    Array(4) [2, 4, 5, 3]
    exo6.js:23
    Array(4) [-10, 10, 28, 2]

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2013
    Messages : 2 035
    Points : 4 267
    Points
    4 267

    Par défaut

    Ici, quand c'est nécessaire, tu permutes arr[i] et newarr[j]. C'est chaud.

    J'ai un peu l'impression qu'à la fin du traitement, on a plein de 'petits' nombres dans arr, et plein de 'grands' nombres dans newarr.
    Je reformule : Si tu as 4 5 6 7 8 9 dans ton tableau de départ, dans un ordre un peu tordu, tu vas avoir certaines étapes où tu as 4 4 5 5 6 7 dans arr, et 6 7 8 8 9 9 dans newarr.
    Sur tes tests, ce n'est pas le cas, mais je pense que sur d'autres données, ça doit arriver.

    Tu n'as pas besoin de newarr[], arr[] suffit pour faire un tri. Et c'est plus sûr.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2018
    Messages : 17
    Points : 21
    Points
    21

    Par défaut

    Merci pour ta réponse !!!

    La question que je me pose est :
    Pourquoi quand je lance mon test, j'ai le "bon résultat " sauf le "3" qui se retrouve à la fin !
    alors que je devrais avoir 2,3,4,5 , c'est ça que je comprends pas bien. Pourquoi la 2ème colonne de mon tableau se retrouve à la fin ? Je suis perdu...

  4. #4
    Invité
    Invité(e)

    Par défaut

    slt,

    i=0
    j=i (ou i+1..)
    sinon pour i > j tu vas permuter ton tableau alors qu'il est déjà trié..

    à noter
    newArr=arr ne sert pas puisque tu manipules une reference et qu'en fait, tu modifies egalement arr en bidouillant newArr
    si tu veux laisser arr inaltéré, alors newArr=arr.slice(0)

    à noter 2
    tmp=arr est malheureux, soit tu tmp; (vu que tu la declare mais tu t'en fous de lui donner une valeur), soit tu tmp = arr[0]; pour ne pas tromper le lecteur, tmp a pour vocation de contenir un scalaire et non un tableau

    pour ma part, jaurais ecrit directement let tmp dans la boucle

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2013
    Messages : 2 035
    Points : 4 267
    Points
    4 267

    Par défaut

    Citation Envoyé par jc313131 Voir le message
    Pourquoi la 2ème colonne de mon tableau se retrouve à la fin ? Je suis perdu...
    Je reformulerais la question : pourquoi le résultat est-il incorrect ?
    A mon avis, si tu essaies de trier des tableaux avec 10 ou 15 éléments, tu auras plus de décalages que celui que tu as constaté sur cet exemple.

    Ici, les 2 tests que tu as faits sont redondants. Dans ces 2 tests, tu as un tableau (3ème, 2ème, 4ème, 1er).
    C'est comme si tu testais sortNumbers(4,3,5,2) , puis sortNumbers(14,13,15,12) , puis sortNumbers(104,103,105,102)
    Normal que ces différents tests générent la même erreur.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Expert éminent Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    3 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 3 225
    Points : 7 551
    Points
    7 551

    Par défaut

    Bonjour

    Est-ce que cette instruction ne serait pas un nouveau pointeur vers un tableau qui est toujours le même, alors que tu crois dupliquer le tableau ?

    Dans la suite, que tu utilises arr ou newArr, c'est du pareil au même. Non ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.
    Votre problème est résolu ? Cliquez sur en bas de page.

    Linux, grep/sed/awk/xml... et autres fichiers plats, Java, C++

  7. #7
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2018
    Messages : 17
    Points : 21
    Points
    21

    Par défaut

    BOUHOUHOU !!!

    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
    function sortNumbers(arr) {
      for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr.length; j++) {
          if (arr[i] > arr[j]) {
            arr[i] = arr[j]
          }
        }
        return console.log(arr);
      }
    }
    
    
    
    /*
      Test 1
      Résultat attendu : [2, 3, 4, 5]
    */
    sortNumbers([4, 10, 5, 2, 9, 7, 8]);
    Merci pour vos conseils !
    J'ai écrit plus clairement les tests et le code. Ce que je recherche c'est comme faire pour prendre passer sur la deuxième colonnes de mon tableau arr ? est ce que je crée un push sur un nouveau tableau ? Je vois pas bien là...

  8. #8
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2018
    Messages : 17
    Points : 21
    Points
    21

    Par défaut

    j'ai compris un des problèmes : le nom de ce tri . donc c'est un tri par sélection !

  9. #9
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2018
    Messages : 17
    Points : 21
    Points
    21

    Par défaut

    Merci à vous tous, j'ai mieux compris mon problème grâce aux différentes réponses.

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

Discussions similaires

  1. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Fonctions
    Réponses: 8
    Dernier message: 27/12/2005, 14h27
  2. Problème dans un tri de tableau
    Par pmboutteau dans le forum ASP
    Réponses: 5
    Dernier message: 29/11/2005, 13h12
  3. [Tableaux] tri de tableau
    Par rdams dans le forum Fonctions
    Réponses: 19
    Dernier message: 08/11/2005, 13h46
  4. [PERL] problème tri de tableau
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2005, 15h42
  5. [langage] tri dans tableau de hachage
    Par mimilou dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2004, 16h10

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