一、题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
二、思路
首先 统计数组中奇数元素个数num_odd;
然后创建一个新数组new int[length]
最后遍历原数组,当元素为奇数时,元素从0开始存入,当元素为偶数时,元素从newarray[num_odd]存入.
三、代码
#include<iostream>
#include<vector>
using namespace std;
int * reOrderArray(vector<int>a)
{
int length=a.size();
cout<<"数组元素个数:"<<length<<endl;
int * newarray = new int[length] ;
int i ;
int num_ji=0;
for(i=0;i<length;i++)
{
if(a[i]%2)
{
num_ji++;
}
}
cout<<"奇数个数:"<<num_ji<<endl;
int j=0;
int z=0;
for(i=0;i<length;i++)
{
if(a[i]%2!=0)
{
newarray[z]=a[i]; // 奇数从a[0]开始存,存z个
z++;
}
else
{
newarray[num_ji+j]=a[i]; //有num_ji个奇数 那么偶数从array[num_ji]开始存,
j++;
}
}
return newarray;
}
int main()
{
vector<int> a={1,4,9,8,7,5,3,10};
int length= a.size();
int * new_array;
int i;
new_array =reOrderArray(a);
cout<<"原数组:"<<endl;
for(i=0;i<length;i++)
{
cout<<a[i]<<",";
}
cout<<"\n奇偶调整后数组:"<<endl;
for(i=0;i<length;i++)
{
cout<<new_array[i]<<",";
}
delete [] new_array;
}