Reverse Array Order

74,730

Solution 1

If it's an Object array, then Collections.reverse(Arrays.asList(array)) will do the job with constant memory and linear time -- no temporary array required.

Solution 2

Use a single temp element.

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;
  }

Solution 3

You don't need to use a temporary array; just step through the array from the beginning to half-way through, swapping the element at i for the element at array.length-i-1. Be sure the handle the middle element correctly (not hard to do, but do make sure.)

Solution 4

you can do it without needing a temp array

  • loop from the beginning (or end doesn't matter) to the middle of the array
  • swap element with element at (last element - index) (so 0 and size - 1, 1 and size - 2 etc)
  • you'll do something like this to swap:
    temp = a[i];
    a[i] = a[end-i];
    a[end-i] = temp;
  • repeat
Share:
74,730
marcwho
Author by

marcwho

Updated on October 13, 2020

Comments

  • marcwho
    marcwho over 3 years

    I am trying to reverse the order of an Array in java.
    What is the most efficient way to do so in O(n) with the least amount of memory used.
    No need to answer with code, pseudo code will be fine.
    Here is my thought process:

      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; ?
    

    Is there a better more efficient way to do this perhaps without using a temp array? and Lastly, assume that there are no nulls in the array, so everything can work. Thank you

    Edit: no this is not homework.

  • Ernest Friedman-Hill
    Ernest Friedman-Hill about 12 years
    +1 Indeed, since the OP now says this is not homework, this is a great answer.
  • eddyparkinson
    eddyparkinson over 11 years
    Love the solution. Just confirmed that no temporary array is required see: ideone.com/api/embed.js/link/xLLTpl ... click "Clone" and then "Run"
  • ceving
    ceving over 10 years
    This does not look like Java.
  • Jean-Yves
    Jean-Yves over 9 years
    Does not work, at least with Java 1.6: System.out.println( X[ 0 ] + " to " + X[ X.length - 1 ] ); Collections.reverse( Arrays.asList( X ) ); System.out.println( X[ 0 ] + " to " + X[ X.length - 1 ] ); prints: 2272.6270739116 to 186.704625250768 2272.6270739116 to 186.704625250768
  • Louis Wasserman
    Louis Wasserman over 9 years
    @Jean-Yves: What is the type of X? I strongly suspect it's not an object array, which I specified in my answer was necessary.
  • Nathan Tuggy
    Nathan Tuggy almost 7 years
    Uses same methods as accepted answer, just less elegantly and with less of an explanation.
  • Darshan
    Darshan almost 7 years
    there are no need of explanation bro it's little two step nd i'm not explainer.
  • Nathan Tuggy
    Nathan Tuggy almost 7 years
    Good answers on Stack Overflow explain things. The accepted answer does. If there's already a good answer that says the same thing you would, or if there's no way to write a good answer at all, there's no real point in adding an answer to the question: that just adds noise.