面试题21_2:调整数组顺序使奇数位于偶数之前(各数之间的相对位置不变)

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

C++版本

#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
#include <queue>
#include <algorithm>
#include "TreeNode.h"
using namespace std;

void reOrderArray(vector<int> &array){
    int len = array.size();
    if(len <= 1)
        return ;
    for(int i = 0; i < len; i++){
        int j = i + 1;
        // a[i]为偶数,j前进,直到替换
        if(array[i]%2 == 0){
            // j为偶数,前进
            while(array[j]%2 == 0){
                // i为偶数,j也为偶数,一直后移到了末尾,证明后面都是偶数
                if(j == len-1)
                    return;
                j++;
            }
            // 此时j为奇数
            int count = j-i;
            int temp = array[i];
            array[i] = array[j];
            while(count>1){
                array[i + count] = array[i + count - 1];//数组后移
                count--;
            }
            array[i+1] = temp;
        }
    }
}


int main()
{
    vector<int> array;
    array.push_back(1);
    array.push_back(2);
    array.push_back(3);
    array.push_back(4);
    array.push_back(5);
    array.push_back(6);
    array.push_back(7);
    reOrderArray(array);
    for(int i = 0; i < array.size(); i++){
        cout<<array[i]<<" ";
    }
    return 0;
}
posted @ 2020-07-28 18:03  程序员曾奈斯  阅读(170)  评论(0编辑  收藏  举报