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

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

题目描述

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

版本一: 利用插入排序, 所不同的是多一个if条件判断

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        int inner = 0;
        int outer = 0;
        long temp = 0;
        
        if (array.empty()) {
            return;
        }
        
        for (outer = 1; outer < array.size(); outer++) {
			//if ((array[outer] + 1) % 2) { 	// 最开始写成这个版本了, 见下图
            if ((array[outer]) % 2) {
                temp = array[outer];
                inner = outer;
                while ((inner > 0) && (0 == array[inner - 1] % 2)) {
                    array[inner] = array[inner - 1];
                    inner--;
                }
                array[inner] = temp;
            }
        }
    }
};

版本二: 条件判断拓展, 剑指offer中的条件拓展, 奇偶判断是亮点

class Solution {
public:
    bool isEven(int number) {
        return  (number & 1) == 0;
    }
    
    void reOrderArray(vector<int> &array) {
        int inner = 0;
        int outer = 0;
        long temp = 0;
        
        if (array.empty()) {
            return;
        }
        
        for (outer = 1; outer < array.size(); outer++) {
            if (! isEven(array[outer])) {
                temp = array[outer];
                inner = outer;
                while ((inner > 0) && isEven(array[inner-1])) {
                    array[inner] = array[inner - 1];
                    inner--;
                }
                array[inner] = temp;
            }
        }
    }
};

posted @ 2019-02-26 01:52  张飘扬  阅读(96)  评论(0编辑  收藏  举报