题目1:
单纯的使得奇数在前,偶数在后,不考虑相对位置
解题思路:
利用两个指针:
第一个从左到右,第二个从右到左;
当第一个指向偶数且第二个指向奇数时,交换位置。
#include<iostream>
#include<vector>
#include<windows.h>
using namespace std;
void reOrderArray(vector<int> &myarray)
{
//使用类似于快速排序的方法
int left, right;
left = 0;
right = myarray.size()-1;
while(left<right)
{
while(left<right&&(myarray[left]%2!=0)) //左边的为偶数时停下来
left++;
while(left<right&&(myarray[right]%2==0)) //右边的为奇数时停下来
right--;
if(left<right)
{
int temp=myarray[left];
myarray[left]=myarray[right];
myarray[right]=temp;
}
left++;
right--;
}
}
void Print(vector<int> &myarray)
{
int num=myarray.size();
for(int i=0; i<num;i++)
cout<<myarray[i]<<" ";
cout<<endl;
return;
}
int main()
{
int arr[]={1,2,3,4,5,5,4,6,7,8,9};
int num=sizeof(arr)/sizeof(int);
vector<int> vec;
for(int i=0;i<num;i++)
{
vec.push_back(arr[i]);
}
cout<<"转换前:"<<endl;
Print(vec);
reOrderArray(vec);
cout<<"转换后:"<<endl;
Print(vec);
system("pause");
return 0;
}
运行结果:
转换前:
1 2 3 4 5 5 4 6 7 8 9
转换后:
1 9 3 7 5 5 4 6 4 8 2
请按任意键继续. . .
题目2:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:
创建同样大的数组,把原数组遍历2遍,第一遍取出奇数放到新数组中,第二遍取出偶数放到新数组中
#include<iostream>
#include<vector>
#include<windows.h>
using namespace std;
void reOrderArray(vector<int> &myarray)
{
vector<int> myarray2;
for(int i=0;i<myarray.size();i++)
{
if(myarray[i]%2!=0)
myarray2.push_back(myarray[i]);
}
for(int i=0;i<myarray.size();i++)
{
if(myarray[i]%2==0)
myarray2.push_back(myarray[i]);
}
myarray.clear();
for(int i=0;i<myarray2.size();i++)
myarray.push_back(myarray2[i]);
}
void Print(vector<int> &myarray)
{
int num=myarray.size();
for(int i=0; i<num;i++)
cout<<myarray[i]<<" ";
cout<<endl;
return;
}
int main()
{
int arr[]={1,2,3,4,5,5,4,6,7,8,9};
int num=sizeof(arr)/sizeof(int);
vector<int> vec;
for(int i=0;i<num;i++)
{
vec.push_back(arr[i]);
}
cout<<"转换前:"<<endl;
Print(vec);
reOrderArray(vec);
cout<<"转换后:"<<endl;
Print(vec);
system("pause");
return 0;
}
运行结果:
转换前:
1 2 3 4 5 5 4 6 7 8 9
转换后:
1 3 5 5 7 9 2 4 4 6 8
请按任意键继续. . .