Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1543 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Tableau : Tri à Bulles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tableau : Tri à Bulles

n°2014666
ZaZ59
Pig in a poke
Posté le 06-08-2010 à 02:33:47  profilanswer
 

Bonjour !
 
Je suis débutant en programmation et je m'amuse à réaliser "des petits exos types".
Ici, ce programme remplit un tableau tabInt de type int avec 5 valeurs aléatoires.
Puis il affiche ce tableau et demande si l'utilisateur désire trier ce tableau.
Jusque là tout est OK.
Mais là où celà bloque c'est au moment du tri, lorsque j'affiche mon tableau après l'avoir trier... ce n'est pas correctement trier...
 
Exemple d'affichage :
 
3 - 7 - 9 - 5 - 7
Voulez-vous trier ce tableau ? [oui] / [non]
oui
3 - 7 - 5 - 7 - 9
 
Mon code :
 

Code :
  1. import java.util.Random;
  2. import java.util.Scanner;
  3. public class tri {
  4. public static final int TAILLE = 5;
  5. static int[] tabInt = new int [TAILLE];
  6. public static void remplir(int tabInt[]){
  7.  int i;
  8.  Random alea = new Random();
  9.  for(i=0; i<TAILLE; i++){
  10.   tabInt[i] = alea.nextInt(10);
  11.  }
  12. }
  13. public static void trier(int tabInt[]){
  14.  boolean permut = false;
  15.  int tampon = 0;
  16.  int i;
  17.  while(!permut){
  18.   permut = false;
  19.   for(i=0; i<TAILLE-1; i++){
  20.    if(tabInt[i] > tabInt[i+1]){
  21.     tampon = tabInt[i];
  22.     tabInt[i] = tabInt[i+1];
  23.     tabInt[i+1] = tampon;
  24.     permut = true;
  25.    }
  26.   }
  27.  }
  28. }
  29. public static void affichage(int TabInt[]){
  30.  int i;
  31.  for(i=0; i<TAILLE; i++){
  32.   System.out.print(tabInt[i]);
  33.   if(i != TAILLE-1)
  34.    System.out.print(" - " );
  35.  }
  36. }
  37. public static void main(String [] args){
  38.  String reponse;
  39.  Scanner input = new Scanner(System.in);
  40.  remplir(tabInt);
  41.  affichage(tabInt);
  42.  System.out.println("\nVoulez-vous trier ce tableau ? [oui] / [non]" );
  43.  reponse = input.nextLine();
  44.  if (reponse.compareTo("oui" ) == 0){
  45.   trier(tabInt);
  46.   affichage(tabInt);
  47.  }
  48. }
  49. }


 
 
Merci pour vos réponses

mood
Publicité
Posté le 06-08-2010 à 02:33:47  profilanswer
 

n°2014668
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 06-08-2010 à 06:14:12  profilanswer
 

Je ne sais coder en Java et il est tard mais il me semble voir le problème:
 

Code :
  1. public static void trier(int tabInt[]){
  2. boolean permut = false;
  3. int tampon = 0;
  4. int i;
  5. while(!permut){
  6. permut = false;
  7. for(i=0; i<TAILLE-1; i++){
  8.   if(tabInt[i] > tabInt[i+1]){
  9.    tampon = tabInt[i];
  10.    tabInt[i] = tabInt[i+1];
  11.    tabInt[i+1] = tampon;
  12.    permut = true;
  13.   }
  14. }
  15. }


 
En gros ton code c'est: Tant que permut est égal a false, on définit permut égal a false, ensuite on fait une boucle et si deux éléments doivent être inversés, permut est mis a true.
 
Le principe du tri a bulles, c'est de faire une boucle qui ne s'arrête dès qu'il ne reste plus d'inversions à effectuer dans le tableau a trier. Or dans ton cas, tu dis que dès qu'il faut inverser deux éléments de ce tableau, la boucle doit s'arrêter.
 
Perso je verrais plus un truc dans ce style:
 

Code :
  1. public static void trier(int tabInt[]){
  2. boolean permut = false;
  3. int tampon = 0;
  4. int i;
  5. while(!permut){
  6. permut = true;
  7. for(i=0; i<TAILLE-1; i++){
  8.   if(tabInt[i] > tabInt[i+1]){
  9.    tampon = tabInt[i];
  10.    tabInt[i] = tabInt[i+1];
  11.    tabInt[i+1] = tampon;
  12.    permut = false;
  13.   }
  14. }
  15. }


 
Ici la boucle ne va s'arrêter que si elle ne rentre pas dans la condition (puisque dès le début de la boucle on met permut a true, et que ta boucle ne continue que si permut est égal a false). Or, si ton algorithme ne rentre pas dans la boucle, c'est tout simplement qu'il n'y a plus de tri a effectuer donc on peut s'arrêter. [:transparency]


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°2014727
lasnoufle
La seule et unique!
Posté le 06-08-2010 à 10:37:29  profilanswer
 

Pas mieux, Wiids a tout dit.
Et un p'tit conseil, tes variables, donne leur des noms qui te permettent de suite de te rappeler ce qu'elles représentent/à quoi elles servent.
Ca a l'air con, mais "permut", voilà quoi.
Alors que si tu l'avais appelé "ilYAEuUnePutainDePermutationPendantLaDerniereBoucle" par exemple, ben à chaque fois que tu vas écrire un test/une affectation, ca sera beaucoup plus clair pour toi.
(oui c'est exagéré mais l'idée est là)


---------------
C'était vraiment très intéressant.
n°2014782
ZaZ59
Pig in a poke
Posté le 06-08-2010 à 11:42:36  profilanswer
 

Merci beaucoup de m'avoir éclairci du coup en réflichissant un peu je trouve ça mieux de faire :
 

Code :
  1. public static void trier(int tabInt[]){
  2.  boolean permut = false;
  3.  int tampon = 0;
  4.  int i;
  5.  do{
  6.   permut = false;
  7.   for(i=0; i<TAILLE-1; i++){
  8.    if(tabInt[i] > tabInt[i+1]){
  9.     tampon = tabInt[i];
  10.     tabInt[i] = tabInt[i+1];
  11.     tabInt[i+1] = tampon;
  12.     permut = true;
  13.    }
  14.   }
  15.  }while(permut == true);
  16. }


 
On continue à boucler tant qu'il y a des permutations  :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Tableau : Tri à Bulles

 

Sujets relatifs
Tableau d'objets XmlHttpRequestImage au-dessus d'un tableau
Probleme avec un tableau structuréAffichage d un tableau retourne par une fonction
fichier -> tableauAjouter des cases dans un tableau en javascript
[RESOLU] Problème tableau php -> javascriptProbleme tableau multidimensionnel
[CSS] transformer une charte tableau en divEXCEL : Envoyer automatique un tableau croisé dynamique par mail
Plus de sujets relatifs à : Tableau : Tri à Bulles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR