Tri d'un tableau caractère par caractère entre la 1ère ligne la 2ème ligne
bonjour,
je me casse la tête sur le tri d'un tableau par ordre croissant ligne par ligne et caractère par caractère. Je vous met un exemple de reponse mais je l'ai pas trouvé ainsi.
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Voici le contenu de votre tableau :
TabTri[0] = 9111
TabTri[1] = 1944
TabTri[2] = 4492
TabTri[3] = 2229
Voici le contenu de votre tableau après le tri :
TabTri[0] = 1111
TabTri[1] = 2222
TabTri[2] = 4444
TabTri[3] = 9999 |
Merci de votre aide, je donne plus bas les fonctions utilisées et le programme principal:cry:
mon code est un peut en vrac avec 2 fonctions en plus du programme principal
fonction echanger
Code:
1 2 3 4 5 6 7
|
private static void echanger(String[] nbr, int jechange)
{
String sauvegarde = nbr[jechange];
nbr[jechange] = nbr[jechange + 1];
nbr[iechange + 1] = sauvegarde;
} |
fonction tri
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
private static void triNumeric(String[] nbr, int nb)
{
boolean inverse; // vrai si on effectue au moins une inversion de
// deux éléments dans la petite boucle, c'est-à-dire si le tableau n'est
// pas encore complètement trié
do {
inverse = false;
for (int i = 0; i < nb - 1; i++)
// du premier à l'avant-dernier élément
{
for (int j=0; j < nbr[i].length()-1; j++)
{
if (nbr[j].charAt(j) > nbr[j + 1].charAt(j + 1))
// test des éléments caractère par caractère, si plus grand que
//son successeur
{
inverse = true; // le tableau n'est pas encore ordonné
echanger(nbr, j);
}
}
}
} while (inverse); // trier tant qu'il reste des éléments non
// ordonnés, donnant lieu à des inversions
} |
programme principal
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
final static int MAXLIG = 4;
public static void main(String[] argument) throws IOException
{
int index;
String chaine;
String[] tabTri = new String[MAXLIG];
index = 0;
do
{
System.out.print(" Entrer les 4 Nombres de la " + (index + 1)
+ "è ligne de votre tableau de : ");
Scanner sc = new Scanner(System.in);
chaine = sc.nextLine();
chaine = chaine.trim();
if (chaine.length() > MAXLIG)
{
chaine = chaine.substring(0, MAXLIG);
}
tabTri[index] = chaine;
index++;
} while (index < MAXLIG);
System.out.println();
System.out.println(" Voici le contenu de votre tableau : ");
for (index = 0; index < MAXLIG; index++)
{
System.out.println(" TabTri[" + index + "] = " + tabTri[index]);
}
//appel de ma fonction tri
triNumeric(tabTri, MAXLIG);
System.out.println();
System.out.println(" Voici le contenu de votre tableau après le tri : ");
for (index = 0; index < MAXLIG; index++)
{
System.out.println(" TabTri[" + index + "] = " + tabTri[index]);
} |
EXECUTION
après exécution, il se passe rien. aucun tri, rien n'a changé.
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Voici le contenu de votre tableau :
TabTri[0] = 9111
TabTri[1] = 1944
TabTri[2] = 4492
TabTri[3] = 2229
Voici le contenu de votre tableau après le tri :
TabTri[0] = 9111
TabTri[1] = 1944
TabTri[2] = 4492
TabTri[3] = 2229 |
Voici sans array list ni collection sort
ce n'est pas le plus performat surtout au niveau du swap
mais voici un code à l'ancienne avec quelques boucles
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| public class TestSort {
/**
* @param args
*/
public static void main(String[] args) {
String[] tabTri = new String[4];
tabTri[0] = "9111";
tabTri[1] = "1934";
tabTri[2] = "4492";
tabTri[3] = "2229";
/* parcourir les élément du tableau */
for (int line = 0; line < tabTri.length; line++) {
for (int row = 0; row < tabTri[line].length(); row++) {
System.out.println(tabTri[line].charAt(row) + " coord " + line + " " + row + " length "
+ tabTri[line].length());
/* sort */
int nextElemeRow = row;
int nextElemeLine = line;
while (true) {
nextElemeRow++;
if (nextElemeRow >= tabTri[line].length()) {
nextElemeRow = 0;
nextElemeLine++;
if (nextElemeLine >= tabTri.length) {
System.out.println("end of process");
break;
}
}
if (tabTri[line].charAt(row) > tabTri[nextElemeLine].charAt(nextElemeRow)){
/* Swap value */
if(line == nextElemeLine){
StringBuffer sbold = new StringBuffer(tabTri[line]);
char mySwapChar = tabTri[line].charAt(row);
sbold.setCharAt(row,tabTri[nextElemeLine].charAt(nextElemeRow));
sbold.setCharAt(nextElemeRow,mySwapChar);
tabTri[line]=sbold.toString();
}else{
StringBuffer sbold = new StringBuffer(tabTri[line]);
StringBuffer sbnew = new StringBuffer(tabTri[nextElemeLine]);
char mySwapChar = tabTri[line].charAt(row);
sbold.setCharAt(row,tabTri[nextElemeLine].charAt(nextElemeRow));
tabTri[line]=sbold.toString();
sbnew.setCharAt(nextElemeRow,mySwapChar);
tabTri[nextElemeLine]=sbnew.toString();
}
}
System.out.println(" check if " + tabTri[line].charAt(row) + " > " + tabTri[nextElemeLine].charAt(nextElemeRow));
}
}
}
System.out.println("the result");
/* parcourir les élément du tableau */
for (int line = 0; line < tabTri.length; line++) {
System.out.println(tabTri[line]);
}
}
} |
A+
P.