Java: Prise en main - Correction

 

Tri par bulle simple

 
public class TriParBulle {
 
    public static int N = 12;
 
    public static void remplirTableauEntiers(int tableau []) {
for (int n = 0; n < tableau.length; n++) {
   tableau[n] = (int) (Math.random() * 1000);
}
    }
 
    public static int [] creerEtRemplirTableauEntiers(int dim) {
int [] t = new int [dim];
remplirTableauEntiers(t);
return (t);
    }
    
    public static void afficherTableauEntiers(int tableau []) {
for (int n = 0; n < tableau.length; n++) {
   System.out.println(tableau[n]);
}
    }
    
    public static void triParBulle(int[] table) {
for (int i=0; i<table.length; i++)
   for (int j=table.length-1; j>i; j--)
if (table[j]>table[j-1]) {
   int tmp = table[j-1];
   table[j-1] = table[j];
   table[j] = tmp;
}
    }
 
    public static void main (String[] args) {
int t[] = creerEtRemplirTableauEntiers(N);
System.out.println("Données initiales :");
afficherTableauEntiers(t);
triParBulle(t);
System.out.println("Données triées :");
afficherTableauEntiers(t);
    }
}
 
 

Tri par bulle à 2 dimensions, version 1

 
public class TriParBulle2_v1 {
 
    public static int li = 12;
    public static int co = 20;
 
    public static void remplirTableauEntiers(int tableau []) {
for (int n = 0; n < tableau.length; n++) {
   tableau[n] = (int) (Math.random() * 1000);
}
    }
 
    public static int [][] creerEtRemplirTableauEntiers2(int dim1, int dim2) {
int [][] t = new int [dim1][dim2];
for (int n = 0; n < dim1; n++) {
   remplirTableauEntiers(t[n]);
}
return (t);
    }
    
    public static void afficherTableauEntiers2(int tableau [][]) {
for (int n = 0; n < tableau.length; n++) {
   for (int m = 0; m < tableau[n].length; m++) {
System.out.print(tableau[n][m]+" ");
   }
   System.out.println();
}
 
    }
    
    public static void triParBulle(int[] table) {
for (int i=0; i<table.length; i++)
   for (int j=table.length-1; j>i; j--)
if (table[j]>table[j-1]) {
   int tmp = table[j-1];
   table[j-1] = table[j];
   table[j] = tmp;
}
    }
 
    public static void triParBulle2_v1(int[][] table) {
for (int i=0; i<table.length; i++)
   triParBulle(table[i]);
    }
 
    public static void main (String[] args) {
int t[][] = creerEtRemplirTableauEntiers2(li,co);
System.out.println("Données initiales :");
afficherTableauEntiers2(t);
triParBulle2_v1(t);
System.out.println("Données triées :");
afficherTableauEntiers2(t);
    }
}
 
 

Tri par bulle à 2 dimensions, version 2

 
public class TriParBulle2_v2 {
 
    public static int li = 12;
    public static int co = 20;
 
    public static void remplirTableauEntiers(int tableau []) {
for (int n = 0; n < tableau.length; n++) {
   tableau[n] = (int) (Math.random() * 1000);
}
    }
 
    public static int [][] creerEtRemplirTableauEntiers2(int dim1, int dim2) {
int [][] t = new int [dim1][dim2];
for (int n = 0; n < dim1; n++) {
   remplirTableauEntiers(t[n]);
}
return (t);
    }
    
    public static void afficherTableauEntiers2(int tableau [][]) {
for (int n = 0; n < tableau.length; n++) {
   for (int m = 0; m < tableau[n].length; m++) {
System.out.print(tableau[n][m]+" ");
   }
   System.out.println();
}
 
    }
    
    // Version plus élaborée : on considère les lignes comme
    // un seul paquet de données. Il faut donc prévoire des fonctions
    // d'accès séquentiel.
 
    private static int lire(int i, int[][] tableau) {
return tableau[i/tableau[0].length][i%tableau[0].length];
    }
 
    private static void ecrire(int i, int[][] tableau, int v) {
tableau[i/tableau[0].length][i%tableau[0].length] = v;
    }
 
 
    // On reprend exactement l'algorithme de triParBulle :
    public static void triParBulle2_v2(int[][] tableau) {
int taille = tableau.length*tableau[0].length;
for (int i=0; i<taille; i++)
   for (int j=taille-1; j>i; j--)
if (lire(j,tableau)>lire(j-1,tableau)) {
   int tmp = lire(j-1,tableau);
   ecrire(j-1,tableau,lire(j,tableau));
   ecrire(j,tableau,tmp);
}
    }
 
    public static void main (String[] args) {
int t[][] = creerEtRemplirTableauEntiers2(li,co);
System.out.println("Données initiales :");
afficherTableauEntiers2(t);
triParBulle2_v2(t);
System.out.println("Données triées :");
afficherTableauEntiers2(t);
    }
}