剑指offer 调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:先找到第一个偶数,位置为i,然后从i + 1开始找第一个奇数,将这个奇数保存起来,将[i , j - 1]这个区间的元素整体后移一个元素单位,那么第i 个位置就空出来了,然后将第j个位置保存好的奇数拷贝到第i个位置。重复执行操作就得到答案。
![](https://images2017.cnblogs.com/blog/1067522/201709/1067522-20170902105759358-1356124830.png)
class Solution { public: bool isEven(int num){ if(num % 2 == 0){ return true; } return false; } void reOrderArray(vector<int> &array) { if(array.size() == 0){ return; } int i = 0; while(i < array.size()){ for(i;i < array.size();++i){ if(isEven(array[i])){ break; } } int j = i + 1; for(j;j < array.size();++j){ if(!isEven(array[j])){ break; } } if(j < array.size()){ int tmp = array[j]; for(int k = j - 1;k >= i;--k){ array[k + 1] = array[k]; } array[i] = tmp; } else{ break; } } } };