Open In App

C++ Program For Rearranging A Given List Such That It Consists Of Alternating Minimum Maximum Elements

Last Updated : 31 May, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a list of integers, rearrange the list such that it consists of alternating minimum-maximum elements using only list operations. The first element of the list should be minimum and the second element should be the maximum of all elements present in the list. Similarly, the third element will be the next minimum element and the fourth element is the next maximum element, and so on. Use of extra space is not permitted. Examples:

Input:  [1 3 8 2 7 5 6 4]
Output: [1 8 2 7 3 6 4 5]

Input:  [1 2 3 4 5 6 7]
Output: [1 7 2 6 3 5 4]

Input:  [1 6 2 5 3 4]
Output: [1 6 2 5 3 4]

The idea is to sort the list in ascending order first. Then we start popping elements from the end of the list and insert them into their correct position in the list. Below is the implementation of above idea – 

C++
// C++ program to rearrange a given list 
// such that it consists of alternating 
// minimum maximum elements 
#include <bits/stdc++.h> 
using namespace std; 

// Function to rearrange a given list 
// such that it consists of alternating 
// minimum maximum elements 
void alternateSort(list<int>& inp) 
{ 
    // sort the list in ascending order 
    inp.sort(); 

    // get iterator to first element of 
    // the list 
    list<int>::iterator it = inp.begin(); 
    it++; 

    for (int i = 1; 
            i < (inp.size() + 1) / 2; i++) 
    { 
        // pop last element (next greatest) 
        int val = inp.back(); 
        inp.pop_back(); 

        // insert it after next minimum 
        // element 
        inp.insert(it, val); 

        // increment the pointer for next 
        // pair 
        ++it; 
    } 
} 

// Driver code 
int main() 
{ 
    // Input list 
    list<int> inp({ 1, 3, 8, 2, 7, 5, 6, 4 }); 

    // Rearrange the given list 
    alternateSort(inp); 

    // Print the modified list 
    for (int i : inp) 
        cout << i << " "; 

    return 0; 
} 

Output:

1 8 2 7 3 6 4 5

Time Complexity: O(N*logN), as we are using a sort function.

Auxiliary Space: O(1), as we are using not  extra space.

Please refer complete article on Rearrange a given list such that it consists of alternating minimum maximum elements for more details!


Next Article
Article Tags :
Practice Tags :

Similar Reads