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

来源:互联网 发布:验证身份证18位数的js 编辑:程序博客网 时间:2024/06/07 10:43

题目描述

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

题目很简单,关键是要保持奇数和奇数 偶数和偶数之间的关系不能变化,就导致我们一定要用稳定的算法,快排啥的就算没戏了,考虑到我们时间复杂度,我们决定使用归并排序的思想,这可是稳定的排序算法(common的算法)中,时间复杂度最小的 O(nlogn)。

class Solution {public:        void sortaction(vector<int> &array,int from,int mid,int end)    {        vector<int> copy(array);        int i=from;        int j=mid+1;        int cur=from;               while( array[i]%2==1 && i<mid+1) copy[cur++]=array[i++];        while( array[j]%2==1 && j<end+1) copy[cur++]=array[j++];                while(i<mid+1) copy[cur++]=array[i++];        while(j<end+1) copy[cur++]=array[j++];                for(int i=from;i<=end;i++)  array[i]=copy[i];                    }    void inpart(vector<int> &array,int from,int len)    {        if(from<len)        {         int mid=(from+len)/2;         inpart(array,from,mid);         inpart(array,mid+1,len);         sortaction(array,from,mid,len);         //for(int i=from;i<=len;i++)  array[i]=0;        }           }        void reOrderArray(vector<int> &array) {        int len=array.size();        inpart(array,0,len-1);        //for(int i=0;i<len;i++)  array[i]=0;        }            };


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 爱一个人太累了怎么办 车凹陷漏底漆了怎么办 燕子窝掉下来了怎么办 文科没考上一本怎么办 学校午休小学孩子吵闹怎么办 老鼠死在空调里怎么办 公务员老公四十岁想辞职怎么办 打胎5次又怀孕怎么办 墙纸颜色太淡了怎么办 皮子腺囊肿有点疼痛怎么办 地板颜色选浅了怎么办 地板买的太暗了怎么办 木地板贴好后发现颜色不好看怎么办 鞋上鞋扣老是开怎么办 虚拟机的win10蓝屏重启怎么办 fs免拆模板专利怎么办 新买的床咯吱响怎么办 实木床一动就响怎么办 cad图纸是斜的怎么办 老房子土墙腻子老掉怎么办 生完孩子子宫大怎么办 刚开的店没人怎么办 刚开业的店没人怎么办 美容店没人进店怎么办 新店开业招不到营业员怎么办 无意开通了花呗怎么办? 花呗灰色用不了怎么办 花呗逾期用不了怎么办 店铺花呗关闭了怎么办 花呗无法使用了怎么办 借呗自动关闭了怎么办 蚂蚁花呗无法开通怎么办 花呗本月还不了怎么办 蚂蚁借呗没钱还怎么办 淘宝账号被限制登录怎么办 辱骂买家被投诉骚扰怎么办 淘宝卖家骚扰买家怎么办 被淘宝卖家电话骚扰怎么办 闲鱼卖东西买家退货运费怎么办 淘宝被恶意拍单怎么办 炒作信用度评价被删除怎么办