Java >> Tutoriel Java >  >> Java

Inverser un tableau en Java

Inverser un tableau en Java | Programmes de tableaux en Java – 16 | Dans le programme Java précédent, nous avons développé des programmes pour trouver le deuxième plus grand nombre dans le tableau et trier un tableau en Java. Dans cet article, nous verrons comment inverser un tableau en Java. Nous discuterons de différentes techniques telles que la façon d'inverser un tableau en Java en utilisant la boucle for, sans utiliser un autre tableau en Java ou en utilisant la récursivité.

Exemple :-

Tableau d'origine :- { 10, 20, 30, 40, 50 }
Inverse du tableau :- { 50, 40, 30, 20, 10 }

Inverser un tableau à l'aide d'un autre tableau

Procédure pour inverser un tableau à l'aide d'un autre tableau et d'une boucle ,

a) Prenez un tableau, supposez realArr
b) Trouvez la longueur du tableau d'origine. Voir :- Comment trouver la longueur d'un tableau en Java
c) Déclarez un autre tableau ayant la même longueur, reverseArr
d) Depuis realArr , sélectionnez à partir du dernier et insérez dans reverseArr depuis le début
e) Répétez (d) jusqu'à la fin du realArr

Un exemple de cette procédure,

int realArr[] = { 10, 20, 30 }; // original array
int reverseArr[3]; // new array

Ensuite,
reverseArr[0] = realArr[2];
reverseArr[1] = realArr[1];
reverseArr[2] = realArr[0];

Enfin, l'inverse du tableau :-
reverseArr[] = { 30, 20, 10 };

Maintenant, laissez-nous programmer Java pour inverser un tableau en utilisant une boucle while et un autre tableau. À la place de la boucle while, vous pouvez utiliser une autre boucle comme la boucle for ou la boucle do-while.

import java.util.Arrays;
import java.util.Scanner;

public class ArrayTest {
  
  // method to reverse an array using another array
  public static int[] reverse(int[] realArr) {
    // declare variables
    int size = 0;
    int reverseArr[] = null;
    
    // find length of the given array
    size = realArr.length;
    
    // temporary array of the same size
    reverseArr = new int[size];
    
    // find reverse and store to temporary array
    // initialize iterator variables
    int i = 0;
    int j = size-1;
    
    while(i < size) {
      // assign element
      reverseArr[i] = realArr[j];
      
      // update iterator variables
      i++;
      j--;
    }
        
    // return result 
    return reverseArr;
  }

  public static void main(String[] args) {
    // declare variables
    Scanner scan = null;
    int size = 0;
    int numbers[] = null;
    int rev[] = null;
    
    // create Scanner class object to take input
    scan = new Scanner(System.in);
    
    // read array size
    System.out.print("Enter array size: ");
    size = scan.nextInt();
    
    // assign length to array
    numbers = new int[size];
    
    // read array elements 
    System.out.println("Enter array elements: ");
    for(int i=0; i<size; i++) {
      numbers[i] = scan.nextInt();
    }
    
    // find reverse and store to rev
    rev = reverse(numbers);
    
    // display reverse of the array
    System.out.println("Reverse = " + Arrays.toString(rev));
    
    // close Scanner 
    scan.close();
  }
}

Sortie :-

Entrez la taille du tableau :5
Entrez les éléments du tableau :
10 20 30 40 50
Inverse =[50, 40, 30, 20, 10]

Inverser un tableau en Java à l'aide de la boucle For

Dans le programme ci-dessus, nous avions utilisé la boucle while. Voyons maintenant la même méthode en utilisant la boucle for.

Alors que loop est une boucle de pré-test où l'expression est évaluée, seules les instructions sont exécutées. Il utilise une expression de test pour contrôler la boucle. Avant chaque itération de la boucle, l'expression de test est évaluée. La boucle for est également une boucle de pré-test, où tout d'abord l'expression d'initialisation est évaluée, puis la condition est vérifiée et si la condition est vraie, seules les instructions de la boucle for sont exécutées.

// method to reverse an array using for loop
public static int[] reverse(int[] realArr) {
   // declare variables
   int size = 0;
   int reverseArr[] = null;
    
   // find length of the given array
   size = realArr.length;
    
   // temporary array of the same size
   reverseArr = new int[size];
    
   // find reverse and store to temporary array
   for(int i=0, j=size-1; i<size; i++, j--) {
      // assign element
      reverseArr[i] = realArr[j];
   }
        
   // return result 
   return reverseArr;
}

Au lieu de la méthode précédente qui utilisait une boucle while, utilisez cette méthode ci-dessus. La procédure des deux méthodes est exactement la même, la seule différence est l'utilisation d'une boucle. La boucle for a réduit les lignes de code par rapport à la boucle while.

Inverser un tableau en Java à l'aide de la boucle While

// find reverse and store to temporary array
// initialize iterator variables
int i = 0;
int j = size-1;
    
while(i < size) {
   // assign element
   reverseArr[i] = realArr[j];
      
   // update iterator variables
   i++; // increase i 
   j--; // decrease j
}

Utilisation de la boucle for,

// find reverse and store to temporary array
for(int i=0, j=size-1; i<size; i++, j--) {
   // assign element
   reverseArr[i] = realArr[j];
}

Inverser un tableau sans utiliser un autre tableau en Java

Il est également possible de ne pas utiliser un autre tableau. En utilisant uniquement le tableau d'origine, nous pouvons inverser le tableau. De cette façon, nous devons échanger les éléments correspondants du premier au dernier.

Procédure pour inverser un tableau en utilisant le même tableau,
a) Prenez un tableau, supposez arr
b) Trouvez la longueur du tableau
c) Sélectionnez le premier et le dernier élément du tableau et échangez-les
d) Répétez ce processus jusqu'à longueur/2

Si la longueur du tableau est paire, tous les éléments du tableau doivent échanger avec un élément relatif, mais si la longueur du tableau est impaire, l'élément à la position centrale restera le même.

Exemple

Exemple utilisant un tableau de longueur paire,
arr[] = {10,20,30,40}; // original array
Maintenant, échangez arr[0] et arr[3] puis
arr[] = {40,20,30,10};
Encore une fois, échangez arr[1] et arr[2] puis
arr[] = {40,30,20,10; // final result

Exemple utilisant un tableau de longueur impaire,
arr[] = {10,20,30,40,50}; // original array
Maintenant, échangez arr[0] et arr[4] puis
arr[] = {50,20,30,40,10};
Encore une fois, échangez arr[1] et arr[2] puis
arr[] = {50,40,30,20,10}; // final result
Pas besoin de faire quoi que ce soit avec l'élément en position centrale.

Voyons maintenant la méthode Java pour trouver l'inverse d'un tableau sans utiliser un autre tableau.

Inverser un tableau en Java à l'aide de la boucle While

Méthode Java pour inverser un tableau en utilisant une boucle while et sans utiliser un autre tableau.

// method to reverse an array without another array
public static int[] reverse(int[] arr) {
    
   // find size
   int size = arr.length;
    
   // variables
   int i = 0;
   int j = size - 1;

   // while loop
   while (i <= size / 2) {
      
     // swap elements
     int temp = arr[i];
     arr[i] = arr[j];
     arr[j] = temp;

     // update i & j
     i++; // increase i
     j--; // decrease j
   }
    
   // return result
   return arr;
}

Utiliser la boucle for

Méthode Java pour inverser un tableau en utilisant la boucle for et sans utiliser un autre tableau.

// method to reverse an array without another array
public static int[] reverse(int[] arr) {

   // find size
   int size = arr.length;

   // for loop
   for(int i=0, j=size-1; i<(size/2); i++, j--) {

      // swap
      int temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
   } 

   // return result 
   return arr;
}

Inverser un tableau en Java à l'aide de la récursivité

Nous pouvons inverser un tableau en utilisant la technique de récursivité. Une méthode qui contient un appel à elle-même est appelée méthode récursive. Une technique de définition de la méthode récursive est appelée récursivité. La méthode récursive nous permet de diviser le problème complexe en cas simples simples identiques qui peuvent être manipulés facilement. C'est aussi une technique de programmation informatique bien connue :diviser pour mieux régner.

// method to reverse an array
public static int[] reverse(int[] arr) {
   reverseArr(arr, 0, arr.length - 1);
   return arr;
}

// recursive method
public static void reverseArr(int[] x, int i, int j) {

   // swap
   if (i < j) {
     int tmp = x[i];
     x[i] = x[j];
     x[j] = tmp;

     // recursive call
     reverseArr(x, ++i, --j);
   }
}

La méthode ci-dessus ne nécessite pas un autre tableau temporaire pour stocker les valeurs. Le reverse() n'est pas une méthode récursive, il appelle en interne reverseArr() qui est une méthode récursive, et s'appelle en interne.

La complexité temporelle de toutes les méthodes données dans cet article est :- O(N) .


Balise Java