21 votes

Inverser l'ordre du tableau

J'essaie d'inverser l'ordre d'un tableau en Java.
Quel est le moyen le plus efficace de le faire en O(n) avec le moins de mémoire utilisée.
Il n'est pas nécessaire de répondre par un code, un pseudo-code fera l'affaire.
Voici ma façon de penser :

  create a new temp array //I think this is a waste of memory, 
                          //but I am not sure if there's a better way
 grab elements from the end of the original array -decrement this variable
 insert element in beginning of temp array -increment this variable
then make the original array point to the temp array? //I am not sure 
            //if I can do this in java; so let's say the 
            //original array is Object[] arr; and the temp array is 
            //Object[] temp. Can I do temp = arr; ?

Existe-t-il un moyen plus efficace de le faire, peut-être sans utiliser un tableau temporaire ? et enfin, supposez qu'il n'y a pas de nulls dans le tableau, donc tout peut fonctionner. Je vous remercie

Edit : non ce n'est pas un devoir.

56voto

Louis Wasserman Points 67557

Si c'est un tableau d'objets, alors Collections.reverse(Arrays.asList(array)) fera le travail avec une mémoire constante et un temps linéaire -- aucun tableau temporaire n'est nécessaire.

13voto

ArjunShankar Points 8476

Utilisez un seul élément de température.

int array[SIZE];
int temp;

for (int i = 0; i < SIZE/2; i++)
  {
     temp = array[i];
     array[i] = array[SIZE-1 - i];
     array[SIZE-1 - i] = temp;
  }

12voto

Ernest Friedman-Hill Points 56605

Il n'est pas nécessaire d'utiliser un tableau temporaire ; il suffit de parcourir le tableau du début jusqu'à la moitié, en échangeant l'élément à i pour l'élément à array.length-i-1 . Veillez à manipuler correctement l'élément central (ce n'est pas difficile à faire, mais assurez-vous-en).

2voto

twain249 Points 5292

Vous pouvez le faire sans avoir besoin d'un tableau temporaire

  • boucle du début (ou de la fin, peu importe) au milieu du tableau

  • échange l'élément avec l'élément à (dernier élément - index) (donc 0 et size - 1 1 et size - 2 etc)

  • vous ferez quelque chose comme ça pour échanger :

    temp = a\[i\];
    a\[i\] = a\[end-i\];
    a\[end-i\] = temp;
  • répéter

0voto

GuyGreer Points 4240

Voici deux solutions :

    loop to N/2
      swap each element at i with element at N - i

Une autre solution consiste (selon les circonstances) à inverser le tableau par indexation :

    GetValueAt(int i){return array[N - i];}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X