Tri tableau en ordre croissant

Rasy1252 Messages postés 6 Statut Membre -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai besoin d'aide pour trie ce tableau en ordre croissant

int A[] = {2, 4, 6, 8, 0, 1, 3, 5, 9, 7};

Merci !!

Configuration: Windows / Chrome 83.0.4103.61

6 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut Rasy1252,

    Renseigne toi sur les algorithmes de tri.

    Si aucun ne t'est imposé en particulier, tu peux utiliser l'algorithme de tri à bulles qui est un des plus simples :

    https://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles

    Si tu as le droit de le faire, tu peux aussi utiliser la fonction standard du C
    qsort()
    , qui est accessible par l'entête
    <stdlib.h>
    :

    http://www.cplusplus.com/reference/cstdlib/qsort/

    Dal
    0
  2. rasy1252
     
    Bonjour,
    oui justement cette algorithme mes imposé:

    A := [2,4,6,8,0,1,3,5,9,7]
    répéter
    echange := false
    pour i := 1 à 9 inclusivement faire
    si A[i-1] > A[i] alors
    temp := A[i-1]
    A[i-1] := A[i]
    A[i] := temp
    echange := true
    fin du “si”
    fin du “pour”
    Jusqu’à ce que echange == false
    pour i := 0 à 9 inclusivement faire
    afficher(A[i])
    fin du “pour”
    fin du programme

    Et le code que j'ai fait, produit les chiffres 2460135879
    Au lieu d'être en ordre croissant
    Est-ce que quelqu'un voit mon erreur ? , voici mon code :
    public static void main(String[] args) {

    int temp;

    boolean echange;
    int A[] = {2, 4, 6, 8, 0, 1, 3, 5, 9, 7};
    echange = false;
    do {

    for (int i=1;i<=9;i++){
    if (A[i-1] > A[i]) {

    temp = A[i-1];
    A[i-1] = A[i];
    A[i] = temp;
    echange = true;
    }
    }

    } while (echange == false );

    for (int i=0;i<=9;i++){
    System.out.print(A[i]);
    }
    }
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour,
      tes deux erreurs sont assez évidentes, mais tu appendras beaucoup plus en les découvrant toi-même.
      pour comprendre ce que fait le code que tu as écrit, ajoute des instructions
      System.out.print
      dans ta boucle et dans ton test, pour comprendre par où ton code passe, et pour vérifier que les valeurs des variables sont telles que tu l'attends.

      tu découvrirais peut-être une des deux erreurs si tu indentais ton algorithme et ton code, et en les comparant.
      quand tu partages du code, prends soin d'utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
      0
  3. Rasy1252
     
    Oui merci, je suis débutant.
    Après plusieurs test je crois que mon do, while ne fonctionne pas et je ne comprend pas pourquoi , vous auriez plus de détails
    Concernant mes erreurs ?
    Merci !
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ce sont deux différences entre ton algorithme et ton code.
      tu découvrirais peut-être une des deux erreurs si tu indentais ton algorithme et ton code, et en les comparant.
      quand tu partages du code, prends soin d'utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

      je pense que ton do/while fonctionne comme tu l'as écrit, pas comme tu l'imagines.

      as-tu ajouté des instructions System.out.print dans ta boucle et dans ton test, pour comprendre par où ton code passe, et pour vérifier que les valeurs des variables sont telles que tu l'attends? montre ton code avec ces instructions, ainsi que ce que cela imprime.

      avant de traduire l'algorithme en code, as-tu essayé de le comprendre? as-tu testé l'algorithme avec un crayon et une feuille?

      c'est, avant tout, en travaillant et en réfléchissant que tu progresseras.
      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      "while" en anglais signifie "tant que", pas "jusqu’à ce que".

      L'initialisation du drapeau
      echange
      à
      false
      n'est faite qu'une fois ; ce n'est pas ce qui est décrit dans l'algorithme.
      0
      1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108 > [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention  
         
        J'ajouterai que ton code n'est pas en C, alors que tu avais initialement posté ta question dans le forum C, d'où ma réponse initiale concernant ce langage.

        Comme il s'avère que tu codes ton tri à bulles en Java, j'ai déplacé ton fil de discussion dans le forum Java.

        Cependant, tes difficultés ne sont pas liées au langage utilisé et sont plus des problèmes de rigueur et de compréhension de ce que fait une boucle do / while, qui se comporte de la même manière dans ces deux langages et de nombreux autres.
        0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Rasy1252
     
    Bonjour,
    Oui j'ai écrit sur une feuille et vérifier avec system.out.print, mais il y a quelque chose dans ma façon de faire qui cloche, y'a rien qui réussi et je suis découragé la, est-ce possible de connaître mes erreurs pour changer ma façon de faire et ne plus commettre ces erreurs ?
    Merci à l'avance !
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      quelle différence as-tu observé entre ce que tu as écrit sur une feuille et ce que tu as obtenu avec system.out.print?

      montre ton code avec les instructions ajoutées, ainsi que ce que cela imprime.
      0
  6. rasy1252
     
    Ce que j'écrit sur un papier fonctionne(ce que je pense) , mais quand j'essais avec Débugger éclipse, après un tour complet du tableau au lieu de faire un retour à do, ça complète et inscrit les chiffres du tour de tableau 2460135879, et quand j'essais aves system.out.print. je print "V" ca print 5 fois le V quand mon system print est 1er instruction dans le IF et le même system print à la derniere instruction dans le IF , donne 9 fois le V.......donc je crois que "echange " à quelque chose de louche .....J'étudie attentivement ça , merci de ton aide !!
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      fais-tu des print pour vérifier la valeur de "echange"? cela te permettra de connaitre la réalité, pas seulement de "croire".
      pourquoi, au lieu d'imprimer "V", n'imprimes-tu pas un texte qui indique où se trouve l'instruction?

      il me semble que tu n'as toujours tenu compte que d'une partie de mes suggestions.
      0