数组中的奇数排在偶数组前面

题目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
请按任意键继续. . .

猜你喜欢

转载自blog.csdn.net/zhenaoxi1077/article/details/80375218