CoddyRun

Forum · Entraide

Résolu

Mon tri à bulles n'affiche que des 6

Ouvert par GaelleH le 29 septembre 2026 · 2 messages · 10 vues

Ce sujet est résolu. Voir la réponse retenue.
G GaelleH a ouvert le sujet 29 septembre 2026 à 22h08 · corrigé

Bonjour à tous,

Je travaille sur un tri à bulles pour classer les notes de ma classe. Le programme s'exécute sans erreur, mais le résultat n'a aucun sens : j'obtiens cinq fois la même note.

Voici mon programme :

notes est un tableau
notes[1] vaut 14
notes[2] vaut 8
notes[3] vaut 17
notes[4] vaut 11
notes[5] vaut 6

n est un nombre
n vaut 5

pour i de 1 à n
  pour j de 1 à n - 1
    si notes[j] > notes[j + 1] alors
      notes[j] vaut notes[j + 1]
      notes[j + 1] vaut notes[j]
    fin si
  fin pour
fin pour

pour i de 1 à n
  affiche notes[i]
fin pour

Toutes mes notes ont été remplacées par la plus petite. J'ai vérifié les indices dix fois, ils me semblent bons, et le programme ne signale aucune erreur.

Est-ce que le problème vient de ma comparaison ou de la façon dont j'échange les deux cases ?

Merci d'avance.

A Admin auteur de CoddyRun 30 septembre 2026 à 05h21

Bonjour GaelleH,

Vos indices sont justes et votre comparaison aussi. Le problème est dans l'échange.

notes[j] vaut notes[j + 1]
notes[j + 1] vaut notes[j]

Ce qui se passe réellement

  • La première ligne écrase notes[j] avec la valeur de notes[j + 1]
  • La valeur d'origine de notes[j] est alors perdue
  • La deuxième ligne recopie donc notes[j + 1] dans lui-même

Les deux cases se retrouvent avec la même valeur, la plus petite des deux. Répété à chaque passage, le plus petit nombre finit par recouvrir tout le tableau, d'où vos cinq 6.

Une image pour retenir

Pour échanger le contenu de deux verres, il faut un troisième verre. Sans lui, on renverse le premier en versant le second.

Voici le programme corrigé

notes est un tableau
notes[1] vaut 14
notes[2] vaut 8
notes[3] vaut 17
notes[4] vaut 11
notes[5] vaut 6

n est un nombre
n vaut 5

temporaire est un nombre

pour i de 1 à n - 1
  pour j de 1 à n - 1
    si notes[j] > notes[j + 1] alors
      temporaire vaut notes[j]
      notes[j] vaut notes[j + 1]
      notes[j + 1] vaut temporaire
    fin si
  fin pour
fin pour

pour i de 1 à n
  affiche notes[i]
fin pour

Il affiche bien :

  • 6
  • 8
  • 11
  • 14
  • 17

Trois lignes seulement ont changé, celles de l'échange. J'ai aussi arrêté la boucle externe à n - 1 : après n - 1 passages, le tableau est forcément trié, le dernier ne sert à rien.

Connectez-vous pour répondre. La création d'un compte est gratuite et prend une minute.