如何将所有奇数放在左边,偶数放在数组右边

how to put all odd number in left an even number in right on array

给定两个整数数组 A 和 B,大小分别为 N 和 M。编写一个名为 MIX 并带有四个参数的函数,它将生成 return 第三个名为 C. 的数组,以便遵循以下序列。

-将A从左到右的所有奇数从左到右复制到C中。 - A 中从左到右的所有 eve 数都从右到左复制到 C 中。 - B从左到右的所有奇数从左到右复制到C中。 -B从左到右的所有偶数从右到左复制到C中。

示例 #1

输入

6 7
3 2 1 7 6 3
9 3 5 6 2 8 10

输出

3 1 7 3 9 3 5 10 8 2 6 6 2

C++ 代码

#include<iostream> 
#include<vector>
#include<algorithm>
using namespace std;
vector<int> insert (vector<int> &a, vector<int> &b)
{
  vector<int>c;

for (int i = 0 ;i < a.size() ; i ++) 
{
  if (a[i]%2!=0 )
    c.push_back(a[i]);
  else 

    c.insert(c.begin(),a[i]);
}
      for(int j = 0; j < b.size() ; j++)
  {
 if (b[j]%2!=0 )

       c.push_back(b[j]);    
  else 
  
        c.insert(c.begin(),b[j]);
      }
return c;
}
int main (void){
  int as;
  int bs;
  cin>>as>>bs;
  vector<int> a(as);  
  vector<int> b(bs);
  for(int i =0 ; i <a.size();i++)
  {
    cin>>a[i];
  }
  for(int k =0 ; k<b.size();k++)
  {
    cin>>b[k];
  }  
  vector<int> c=insert(a,b);
  for(int & v: c)
        cout<<v<<"    ";
  return 0;
}
#include<iostream>
#include<vector>
using namespace std;

int * MIX(int *A,int n,int *B,int m){
int len = n+m;
int* C = new int[len];
vector<int>odd;
vector<int>even;
for(int i = 0; i < n ; i++){
    if(A[i]%2==0)
        even.insert(even.begin(), A[i]);
    else
        odd.push_back(A[i]);
}
for(int j = 0; j < m ; j++){
    if(B[j]%2==0)
        even.insert(even.begin(), B[j]);
    else
        odd.push_back(B[j]);
}
int k = 0;
for(k; k < odd.size(); k++)
{
    C[k] = odd[k];
}
for(int l = 0 ; l < even.size(); l++)
{
    C[l+k] = even[l];
}

return C;


}
#include <vector>
#include <algorithm>

static bool is_odd(int n) { return n % 2 == 1; }

// Let a == {3, 2, 1, 7, 6, 3} as example
static std::vector<int>::iterator order_odds_first_and_reverse_evens(std::vector<int> &a) {
    // a == {3, 2, 1, 7, 6, 3}
    const auto first_even{stable_partition(a.begin(), a.end(), is_odd)};
    // a == {3, 1, 7, 3, 2, 6}
    reverse(first_even, a.end());
    // a == {3, 1, 7, 3, 6, 2}
    return first_even;
    // first_even points to 6
}

std::vector<int> insert(std::vector<int> &a, std::vector<int> &b) {
    // b == {9, 3, 5, 6, 2, 8, 10}
    order_odds_first_and_reverse_evens(b);
    // b == {9, 3, 5, 10, 8, 2, 6}

    // a == {3, 2, 1, 7, 6, 3}
    a.insert(
        order_odds_first_and_reverse_evens(a), // a == {3, 1, 7, 3, 6, 2}
        b.begin(), 
        b.end()
    );
    // a == {3, 1, 7, 3, 9, 3, 5, 10, 8, 2, 6, 6, 2}
    return a;
}