In this post we will understand the problem of rearranging the array’s even and odd values in Ascending order, then we will discuss the best possible approach and then write a C++ code to implement the solution. Let’s discuss the problem:
Given: An array of integers with equal number of even and odd values.
Problem: Arrange the given array in such a way that odd and even values come in alternate fashion in ascending order respectively.
- If the smallest value is Even then we have to print Even-Odd pattern.
- If the smallest value is Odd then we have to print Odd-Even pattern.
Let’s say an example for the same.
Examples:
Input: arr[] = {1, 3, 2, 5, 4, 7, 10} Output: 1, 2, 3, 4, 5, 10, 7 Smallest value is 1(Odd) so output will be Odd-Even pattern. Input: arr[] = {9, 8, 13, 2, 19, 14} Output: 2, 9, 8, 13, 14, 19 Smallest value is 2(Even) so output will be Even-Odd pattern.
Solution:
- Sort the given array.
- Insert Even values in List-1 and Odd values in List-2.
- Now if the smallest value is even, then insert an even value from list 1 and odd value from list 2 to original array and so on.
- But if the smallest value is odd, then insert an odd value from list 2 and even value from list 1 to original array and so on.
Now let’s write a program to implement the above solution in C++ programming language.
C++ Program to rearrange Array’s Even and Odd values in Ascending order:
// C++ implementation of the above approach #include <bits/stdc++.h> using namespace std; void AlternateRearrange(int arr[], int n) { // Sort the array sort(arr, arr + n); vector<int> v1; // to insert even values vector<int> v2; // to insert odd values for (int i = 0; i < n; i++) if (arr[i] % 2 == 0) v1.push_back(arr[i]); else v2.push_back(arr[i]); int index = 0, i = 0, j = 0; bool flag = false; // Set flag to true if first element is even if (arr[0] % 2 == 0) flag = true; // Start rearranging array while (index < n) { // If first element is even if (flag == true) { arr[index++] = v1[i++]; flag = !flag; } // Else, first element is Odd else { arr[index++] = v2[j++]; flag = !flag; } } // Print the rearranged array for (i = 0; i < n; i++) cout << arr[i] << " "; } // Driver code int main() { int arr[] = { 9, 8, 13, 2, 19, 14 }; int n = sizeof(arr) / sizeof(int); AlternateRearrange(arr, n); return 0; }
OUTPUT:
2 9 8 13 14 19
Comment below in case of any query, issues or suggestions regarding the problem discussed above.