调整数组顺序使奇数位于偶数前面
2018-01-18 11:15
211 查看
1、题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。2、代码
(1)自己代码1// 自己实现1 void reOrderArray1(vector<int> &array) { vector<int> vecj, vecO; for(auto iter=array.begin();iter!=array.end();iter++) { if((*iter)&0x01) //奇数 vecj.push_back(*iter); else //偶数 vecO.push_back(*iter); } copy(vecj.begin(), vecj.end(),array.begin()); copy(vecO.begin(), vecO.end(), array.begin()+vecj.size()); }
注意:这里主要用到了copy()函数。
(2)其他代码
//自己实现2 void reOrderArray2(vector<int> &array) { for(int i=0;i<array.size();i++) { if(!(array[i]&0x01)) //偶数 { //bool bTemp = false; for(int j=i+1;j<array.size();j++) { if(array[j]&0x01) //奇数 { int temp = array[j]; for(int m=j;m>i;m--) array[m]=array[m-1]; array[i] = temp; break; } } } } }
这里的代码虽然复杂度较高,但是代表了一种思路,可能用在这里不是很好,但是这种思路不错。要想保证原有次序,则只能顺次移动或相邻交换,是不能直接距离不是0的两个位置的数据直接交换的,这样后面顺序都会出错。
(3)犯错点:
下面记录一个自己在写代码的时候犯的一个错误:
if(!array[i]&0x01){...} // 这里这样判断奇偶数是错误的,因为“!”的优先级较高,比“&”的优先级高,正确写法如下: if(!(array[i]&0x01)){...}
以后写代码记得用位运算代替“%”来判别数的奇偶
3、扩展
(1)题目:如果只是替换,奇数和偶数各个之间的相对顺序可以变化。(2)代码:
// 代码:如若不考虑相对顺序 void reOrderArray3(vector<int> &array) { int start=0, end=array.size()-1; while(start<end) { while((start<end)&&((array[start]&0x01))) start++; while((start<end)&&(!(array[start]&0x01))) end++; if(start<end) { int temp = array[start]; array[start] = array[end]; array[end] = temp; } } }
(3)这里需要强调的是这种编程的思路,特别重要。
相关文章推荐
- 调整数组顺序使得奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组的顺序使奇数位于偶数的前面
- 14.调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 面试14:调整数组顺序使奇数位于偶数前面
- 面试题:调整数组顺序使奇数位于偶数前面
- 剑指offer-----调整数组顺序使奇数位于偶数前面
- 【37】调整数组顺序使奇数位于偶数前面
- H面试(24):调整数组顺序使奇数位于偶数前面
- 面试题14:调整数组顺序使奇数位于偶数前面
- 剑指Offer系列-面试题14:调整数组顺序使奇数位于偶数前面
- 重拾算法之剑指Offier——调整数组顺序使奇数位于偶数前面
- [剑指Offer] 13.调整数组顺序使奇数位于偶数前面
- 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于偶数前面
- coding - 调整数组顺序使奇数位于偶数前面
- 面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer-调整数组顺序使奇数位于偶数前面
- 【剑指offer】面试题14:调整数组顺序使奇数位于偶数前面
- 剑指Offer----调整数组顺序使奇数位于偶数前面