调整数组顺序使奇数位位于偶数位前面

调整数组顺序使奇数位位于偶数位前面

时间限制:1秒 空间限制:32768K

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

题目分析

(1)从后往前遍历,
(2)定义一个iEven和iOdd变量,分别记录当前遍历到的最左边的偶数位置和最左边的奇数位置。
(3)当遍历的数为偶数时,判断iEven是否相等,相等则将iEven和iOdd均减1,然后继续遍历下一个元素,否则将其右边的奇数依次往前挪一个位置,并将偶数放到iEven
(4)当遍历的数为奇数时,iOdd减1
(5)循环直到遍历所有元素。

代码实现

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        int iEven, iOdd;
        iEven = array.size() - 1;
        iOdd = iEven;
        for (int i = array.size() - 1; i >= 0; i--)
        {
            if (array[i] % 2 == 0)
            {
                if (iEven != iOdd)
                {
                    int iTemp = array[i];
                    for (int j = iOdd; j < iEven; j++)
                    {
                        array[j] = array[j + 1];
                    }
                    array[iEven] = iTemp;
                    iEven--;
                    iOdd--;
                }
                else
                {
                    iEven--;
                    iOdd--;
                }
            }
            else
            {
                iOdd--;
            }
        }
    }
};

猜你喜欢

转载自blog.csdn.net/flyingsbird/article/details/81088859
今日推荐