/* Calcul de l'indice de la valeur minimale    */
/* d'un tableau d'entiers                      */

public class FusionTableaux {

/* Fonction de creation et retour              */
/* d'un tableau de double initialisé           */
/* avec une serie croissante                   */
/* de nombres aleatoires                       */
/* n : La taille du tableau à générer          */

  static int [] initRandCroissant(int n) {
    int i;
    int [] tab = new int[n];
    tab[0] =(int) (Math.random()*10);
    for ( i = 1 ; i < tab.length ; i = i+1 ) {
      tab[i] = tab[i-1]+(int)(Math.random()*10); }
    return tab;
  }
  
/* Fonction d'affichage des valeurs contenues  */
/* dans un tableau de double                   */
/* t : Le tableau de double à afficher         */
  
  static void affichageTableau(int [] t) {
    int i;
    for ( i = 0 ; i < t.length ; i = i+1 ) {
      Ecran.afficherln(t[i]); }
  }

/////////////////////////////////////////////////
  
/* Fonction de fusion de 2 tableau d'entiers   */
/* tries t1 et t2 en un nouveau tableau        */
/* d'entiers trie                              */
/* Le tableau ainsi obtenu est retourné        */
/* t1 : Le premier tableau trié                */
/* t2 : Le second tableau trié                */
  
  static int [] fusion(int [] t1,int [] t2) {
    int l = t1.length+t2.length;
    int [] t = new int[l];
    int i;
    int i1;
    int i2;
    i1 = 0;
    i2 = 0;
    for ( i = 0 ; i < l ; i = i+1 ) {
      if ( i1 == t1.length ) {
        t[i] = t2[i2];
        i2 = i2+1; }
        else {
        if ( i2 == t2.length ) {
          t[i] = t1[i1];
          i1 = i1+1; }
          else {
          if ( t1[i1] < t2[i2] ) {
            t[i] = t1[i1];
            i1 = i1+1; }
            else {
            t[i] = t2[i2];
            i2 = i2+1; } } } }
    return t;
  }

/////////////////////////////////////////////////

/* Programme principal                         */

  public static void main(String [] args) {
    int n1;
    int [] t1;
    int n2;
    int [] t2;
    int [] t;
    Ecran.afficher("SVP, taille du tableau 1? ");
    n1 = Clavier.saisirInt();
    t1 = initRandCroissant(n1);
    affichageTableau(t1);
    Ecran.afficher("SVP, taille du tableau 2? ");
    n2 = Clavier.saisirInt();
    t2 = initRandCroissant(n2);
    affichageTableau(t2);
    t = fusion(t1,t2);
    Ecran.afficherln("Tableau trié:");
    affichageTableau(t);
  }
}