2 views

I am trying to reverse an array.

For example, if I have:

a = [1,2,3,4,5,6]

I want to have an output like this:

output = [6,1,5,2,4,3]

What I am doing is that I want the largest number, followed by the smallest number, followed by the second largest number, followed by the second smallest number, etc.

I have the code but doesn't work for all cases.

Here is a copy of my code

def meanderingArray(arr) :

n = len(arr)

arr.sort()

tempArr = [0] * (n + 1)

ArrIndex = 0

i = 0

j = n-1

while(i <= n // 2 or j > n // 2 ) :

tempArr[ArrIndex] = arr[j]

ArrIndex = ArrIndex + 1

tempArr[ArrIndex] = arr[i]

ArrIndex = ArrIndex + 1

i = i + 1

j = j - 1

for i in range(0, n) :

arr[i] = tempArr[i]

return arr

meanderingArray([22231,44423,66574,-14122,-12322,14476])

IndexError                                Traceback (most recent call last)

<ipython-input-28-8993ecc448e2> in <module>

----> 1 meanderingArray([22231,44423,66574,-14122,-12323,14476])

<ipython-input-26-24690fd05e2d> in meanderingArray(arr)

14         tempArr[ArrIndex] = arr[j]

15         ArrIndex = ArrIndex + 1

---> 16         tempArr[ArrIndex] = arr[i-1]

17         ArrIndex = ArrIndex + 1

by (36.8k points)

Your code doesn't run when the array has an odd length. You will be taking the middle element twice, once using I and once using j, and then appending it twice. It would have stayed more clear what was broken if instead, you wrote:

tempArray = []

while.....

tempArray.append(arr[j])

tempArray.append(arr[i])

...

first, get an AIOOB exception, you would see that the middle element was added twice. You need to cancel out of the early if i==j

If you are a beginner and want to know more about Data Science the do check out the Data Science course