每天一道算法题——奇偶数划分

来源:互联网 发布:手机管家婆软件下载 编辑:程序博客网 时间:2024/06/05 23:52

要求:有一个整数数组,写一个函数,实现奇数奇数在左,偶数在右。

例子:a[10] = {2,4,3,5,7,8,1,9,6,10},其中a[10] = {3,5,7,1,9,2,4,8,6,10}是一个合法的输出。

分析:

方法一:遍历一遍数组,vector1存奇数,vector2存偶数,然后vector2加到vector1后面。

方法二:快排的思想,首尾两个指针,向前向后遍历,交换奇偶数。

代码:

方法1:

void fun1(int a[],int N){    vector<int> v1;    vector<int> v2;    for(int i=0;i<10;i++)    {        if(a[i]&1)        {            v1.push_back(a[i]);        }        else        {            v2.push_back(a[i]);        }    }    v1.insert(v1.end(),v2.begin(),v2.end());    vector<int>::iterator it1 = v1.begin();    for(;it1!=v1.end();it1++)    {        cout<<*it1<<endl;    }}
方法二:

void fun2(int a[],int N){int m = 0;int n = N-1;while(m!=n+1){if(!(a[m]&1)){int temp = a[m];a[m] = a[n];a[n] = temp;n--;}else{m++;}}for(int i=0;i<10;i++){cout<<a[i]<<" ";}}