在 C++ 中以交替方式按升序重新排列奇数和偶数


给定一个包含正数和负数的整数类型数组,例如,任意大小的 arr[]。任务是以这样的方式重新排列数组,当数组中的最小元素为奇数时,数组的元素将以奇数在前偶数在后的方式重新排列。当数组中的最小元素为偶数时,数组的元素将以偶数在前奇数在后的方式重新排列,如果偶数/奇数元素的数量多于奇数/偶数元素的数量,则它将放置 0 并打印结果。

让我们看看这种情况下的各种输入输出场景 -

输入 - int arr[] = { 1, 1, 2, 2, 5, 4 }

输出 - 奇数和偶数值以交替方式按升序重新排列的结果为:1 2 1 2 5 4。

说明 - 给定一个整数类型数组。现在我们将检查数组中最小的元素,即 1,它是奇数值,因此元素将以奇数在前偶数在后的方式排列,即 1 2 1 2 5 4 是最终输出。

输入 - int arr[] = { 6, 3, 2, 8, 10, 4 }

输出 - 奇数和偶数值以交替方式按升序重新排列的结果为:2 3 4 0 6 0

说明 - 给定一个整数类型数组。现在我们将检查数组中最小的元素,即 2,它是偶数值,所

下面程序中使用的途径如下

  • 输入一个整数类型元素的数组并计算数组的大小。

  • 使用 C++ STL 的 sort 方法对数组进行排序,将数组和数组的大小传递给 sort 函数。

  • 声明一个整型变量并将其设置为 Rearrangement(arr, size) 函数调用的结果。

  • 在函数 Rearrangement(arr, size) 内部

    • 创建两个变量 'vec_1' 和 'vec_2' 作为向量类型,用于存储整数类型数据。

    • 创建一个整型类型的临时变量 temp 并将其设置为 0。

    • 声明另一个布尔类型的变量 check 并将其设置为 FALSE 值。

    • 从 i 为 0 开始循环到 i 小于 size。在循环内,检查 IF arr[i] % 2 = 0,则将 arr[i] 推送到 vec_1。否则,将 arr[i] 推送到 vec_2。

    • 将整型变量 i 和 j 设置为 0。检查 IF arr[0] % 2 = 0,则将 check 设置为 true。

    • 开始 WHILE temp 小于 size 的循环。在循环内,检查 IF check = true,则将 arr[temp++] 设置为 vec_1[i++] 并将 check 设置为 !check。否则,将 arr[temp++] 设置为 vec_2[j++] 并将 check 设置为 !check。

  • 打印结果。

示例

#include <bits/stdc++.h>
using namespace std;
void Rearrangement(int arr[], int size){
   vector<int> vec_1, vec_2;
   int temp = 0;
   bool check = false;
   for(int i = 0; i < size; i++){
      if(arr[i] % 2 == 0){
         vec_1.push_back(arr[i]);
      }
      else{
         vec_2.push_back(arr[i]);
      }
   }
   int i = 0;
   int j = 0;
   if(arr[0] % 2 == 0){
      check = true;
   }
   while(temp < size){
      if(check == true){
         arr[temp++] = vec_1[i++];
         check = !check;
      }
      else{
         arr[temp++] = vec_2[j++];
         check = !check;
      }
   }
}
int main(){
   int arr[] = { 1, 1, 2, 2, 5, 4 };
   int size = sizeof(arr) / sizeof(int);
   //sort an array
   sort(arr, arr + size);
   cout<<"Rearrangement of Odd and Even values in Alternate Fashion in Ascending Order is: ";
   Rearrangement(arr, size);
   for(int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出

Rearrangement of Odd and Even values in Alternate Fashion in Ascending Order is: 1 2 1 2 5 4

更新于: 2021年11月2日

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告