Tri tableau en ordre croissant

Rasy1252 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 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
A voir également:

6 réponses

Chris 94 Messages postés 54087 Date d'inscription   Statut Modérateur Dernière intervention   7 345
 
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
"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
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105 > [Dal] Messages postés 6205 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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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