Tri tableau en ordre croissant

Fermé
Rasy1252 Messages postés 3 Date d'inscription jeudi 28 mai 2020 Statut Membre Dernière intervention 29 mai 2020 - 29 mai 2020 à 16:31
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 3 juin 2020 à 14:34
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

Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 325
29 mai 2020 à 16:33
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 29 mai 2020 à 18:15
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
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 31 mai 2020 à 14:59
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
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
31 mai 2020 à 18:23
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
3 juin 2020 à 14:17
"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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
Modifié le 3 juin 2020 à 14:35
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
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
1 juin 2020 à 14:17
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
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
1 juin 2020 à 15:34
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