本题来自《剑指offer》 调整数组顺序使得奇数在偶数前面
题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
假设程序功能是黑盒子,现在考虑输入和输出。
输入:【1,2,3,4,5,6】,数组为空,只有一个元素
输出:题目要求相对位置不变,【1,3,5,2,4,6】代码一实现,需要借助辅助内存。
若位置可以变,【1,5,3,4,2,6】 代码二实现,前后指针遍历,前面的偶数和后面的奇数互换即可
C++ Code(2):
class Solution { public: void reOrderArray(vector<int> &array) { vector<int> result; int left = 0; int right = array.size()-1; int temp; while (left<right){ while ((left<right)&& !isEven(array[left])){ //前指针向后移动直到遇到奇数 left++; } while((left<right)&& isEven(array[right])){ //后指针向前移动直到遇到偶数 right--; } if (left<right){ //走到这一步,说明前指向了偶数,后指针指向了奇数 temp = array[left]; array[left] = array[right]; array[right] = temp; } } } bool isEven(int num){ //判断奇偶数 return (num&1)==0; } };
C++ Code(1):
class Solution { public: void reOrderArray(vector<int> &array) { vector<int> result; int num=array.size(); for(int i=0;i<num;i++) { if(array[i]%2==1) result.push_back(array[i]); } for(int i=0;i<num;i++) { if(array[i]%2==0) result.push_back(array[i]); } array=result; } };