Rearrange array such that elements at even positions are greater than odd in C++

Hello there! In this tutorial, we will rearrange elements of an array such that elements at even positions are greater than odd positions.

e.g.

int arr[]={15,12,13,18,5,9};
// for this output should be 18 5 15 9 13 12

So let’s see how we can do this.

 

Algorithm

The algorithm used to rearrange the array is very simple yet interesting.

  • First, we sort the given array in ascending order.
  • Now we define two pointers begin and end which points at the beginning and at the end respectively.
  • Next, we take an answer array and start filling values from the sorted array such that if we are at an odd position in the answer array, arr[begin] is copied and begin pointer is incremented by 1.
  • Similarly, if we at an even position in the answer array, arr[end] is copied and end pointer is decremented by 1.
  • We do this till begin pointer is smaller than or equal than the end pointer.
  • The final result will be stored in the answer array.

 

Here is the code of the above algorithm:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int arr[] = {15,12,13,18,5,9};
    int n = sizeof(arr)/sizeof(int);
    
    cout<<"The given array is:"<<endl;
    for(int j =0 ; j<n ; j++ ){
        cout<<arr[j]<<' ';
    }
    
    sort(arr, arr + n);  // sorting array
    int answer[10];     // answer array
    
    int begin = 0, end = n-1;  // two pointers
    
    for(int j =0 ; j< n ; j++ ){
        if(j%2 == 0)   //even position
        {
            answer[j] = arr[end];
            end--;
        }
        else {          // odd position
            answer[j] = arr[begin];
            begin++;
        }
    }
    
    cout<<endl<<"The rearranged array is:"<<endl;
    for(int j =0 ; j<n ; j++ ){
        cout<<answer[j]<<' ';
    }
    
  return 0;
}

 

Output:

The given array is:
15 12 13 18 5 9
The rearranged array is:
18 5 15 9 13 12

 

In this algorithm, sorting takes O(n*logn) time and traversing takes O(n) time. Thus making overall time complexity O(n*logn + n) or simply O(n*logn). Whereas the space complexity is O(n) for the answer array.

Hope it is clear.

Leave a Reply

Your email address will not be published.