调整数组顺序使奇数位于偶数前面
来源:互联网 发布:手机刷机数据恢复 编辑:程序博客网 时间:2024/06/06 19:16
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
注意:相对位置不变,考虑到冒泡排序、插入排序、归并排序等稳定的排序算法。
1、冒泡思想:时间复杂度O(n^2)
class Solution {public: void reOrderArray(vector<int> &array) { int len=array.size(); if(len<=0) return; for(int i=0;i<len;i++) { for(int j=len-1;j>i;j--) { if(!(array[j-1]&0X1)&&(array[j]&0X1)) swap(array[j-1],array[j]); } } }};
2、外排+插入思想:时间复杂度O(n^2)
* 1.要想保证原有次序,则只能顺次移动或相邻交换。
* 2.i从左向右遍历,找到第一个偶数。
* 3.j从i+1开始向后找,直到找到第一个奇数。
* 4.将[i,...,j-1]的元素整体后移一位,最后将找到的奇数放入i位置,然后i++。
* 5.終止條件:j向後遍歷查找失敗。
class Solution {public: void reOrderArray(vector<int> &array) { int len=array.size(); if(len<=0) return; for(int i=0;i<len;i++) { //寻找第一个偶数,i位置为偶数 while(i<len&&(array[i]&0x1)) i++; //从偶数下一个位置开始查找第一个奇数 int j=i+1; while(j<len&&!(array[j]&0x1)) j++; //j位置为奇数,将i~j之间的偶数后移,这个奇数插入i位置 if(j<len) { int tmp=array[j]; for(int k=j-1;k>=i;k--) array[k+1]=array[k]; array[i]=tmp; } else//查找失败 break; } }};
3、插入排序思想:时间复杂度为O(n^2)
class Solution {public: void reOrderArray(vector<int> &array) { int len=array.size(); if(len<=0) return; //依次将每个元素插入到所在位置 int i,j; for(i=0;i<len;i++) { //若array[i]为奇数,需要把它插入到奇数部分 if(array[i]&0x1) { int tmp=array[i];//哨兵 //从后向前查找待插入位置 for(j=i-1;j>=0&&!(array[j]&0x1);j--) array[j+1]=array[j];//向后移位 array[j+1]=tmp;//复制到插入位置 } } }};
4、空间换时间:时间复杂度O(n) 空间复杂度O(n)
class Solution {public: void reOrderArray(vector<int> &array) { if(array.size()<=0) return; int begin=0;//指向第一个元素 int end=array.size()-1;//指向末尾元素 vector<int> temp; for(int i=0;i<array.size();i++) temp.push_back(array[i]); int i=0,j=0; for(i=0;i<temp.size();i++) { if((temp[i]&0x1)==1)//奇数 array[j++]=temp[i]; } for(i=0;i<temp.size();i++) { if((temp[i]&0x1)==0)//偶数 array[j++]=temp[i]; } }};
1 0
- 【数组3】-调整数组顺序使奇数位于偶数前面
- 数组3:调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面--总结
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面[
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面
- 调整数组顺序使偶数位于奇数前面
- coding - 调整数组顺序使奇数位于偶数前面
- div.2/Bellovin<最长上升子序列>
- java中equals与==的区别
- 电脑的运行、控制面板、命令提示符被禁用的解决方案
- 如何在Android Studio使用Espresso框架自动化测试
- 完美 定义popwindow
- 调整数组顺序使奇数位于偶数前面
- 双向链表
- 夜间模式
- 四、封装OkHttp
- poj3628
- 安卓 toast
- Servlet(1)
- 传智播客黑马程序员骗局真相揭秘
- 解决:Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.