思路:设置两个指针,一个less一个more,如果当前less位置的元素为偶数,那么和more位置的元素交换位置,more--,接着继续判断交换过来的元素是否是偶数,如果继续是偶数,那么继续和more位置的元素交换,一直循环到less>=more,复杂度为O(N)代码如下

    public static void reOrderArray(int[] arr) {if (arr.length == 0 || arr == null) return;int less = 0;int more = arr.length - 1;while ( less < more ) {while ( arr[less] % 2 == 0 ) {//只要当前less位置的元素为偶数swap(arr, less, more);//交换位置more--;//交换后more位置肯定为偶数了,那么more--,继续循环判断交换的元素是否是偶数}less++;}}public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}

完整代码:给一个数组,把偶数放到左边,奇数放到右边

下边看进阶版:

题目描述

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

思路,只要前面的数为偶数,当前的数为奇数,那么就一直交换位置到最前面的奇数后面,这个指针为less,时间复杂度为O(N),不过一直从后往前交换,交换次数较多,但是这种方法没有使用额外空间。

贴上代码:

public static void reOrderArray(int [] array) {if ( array == null || array.length == 0 ) return;int left = 0;//从左向右最右边的奇数下标for (int i = 0; i < array.length; i++) {if (array[i] % 2 == 1) {int cur = i;//碰到的奇数while ( cur > left ) {//逐个交换已经排序了的最右边的奇数下标到当前奇数之间的所有数swap(array, cur, --cur);}left++;//交换完奇数下标向右移动}}}private static void swap(int[] array, int j, int i) {int tmp = array[i];array[i] = array[j];array[j] = tmp;}

完整代码:调整数组顺序使奇数位于偶数前面(有序)

给一个数组,把偶数放到左边,奇数放到右边(有序和无序)相关推荐

  1. 拆分一个链表为偶数链表和奇数链表

    拆分一个链表为偶数链表和奇数链表 问题简述 设计一个算法,将一个结点值为自然数的单链表拆分为两个单链表,原表中保留值为偶数的结点,而值为奇数的结点按他们在原表中的相对次数组成一个新的单链表 代码实现 ...

  2. 有多个正整数存放在数组中,编写一个函数要求偶数在左边由小到大顺序放置,奇数在右边,也是由小到大顺序放置,Java实现...

    思路: * 1.首先分左右 * 2.分好再排序(左边和右边都单独排序) 第一步:分左右 可得注意了: 大体思路最先是从两头出发分成4种情况讨论(左or右,奇数or偶数)循环处理,出口是双层的嵌套循环( ...

  3. 一个数组,负数放左边,正数放右边

    快速排序一次划分的应用 #include<iostream> using namespace std;void swap(int *arr, int i, int j){int temp ...

  4. 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数

    import java.util.Arrays;/*** Created by lihaibin02 on 2016/9/13.*/ /* * 给定一个存放整数的数组,重新排列数组使得数组左边为奇数, ...

  5. 数据结构——已知数组A[1…n] 的元素类型为整型int,设计一个时间和空间上尽可能高效的算法,将其调整为左右两部分,左边所有元素为奇数,右边所有元素为偶数,不要求对这些元素排序。

    题目:已知数组A[1-n] 的元素类型为整型int,设计一个时间和空间上尽可能高效的算法,将其调整为左右两部分,左边所有元素为奇数,右边所有元素为偶数,不要求对这些元素排序. 代码展示: #inclu ...

  6. 如何重新排列数组使得数组左边为奇数,右边为偶数

    给定一个存放整数的数组,如何重新排列数组使得数组左边为奇数,右边为偶数?要求:空间复杂度为O(1),时间复杂度为O(n); 代码 #include <iostream> using nam ...

  7. Java 数组 定义一个数组,获取数组中的最大值和最小值,奇数个数和偶数个数...

    /*** 定义一个数组,获取数组中的最大值和最小值 奇数个数和偶数个数* */ package com.xuyigang1234.chp01;public class Demo8 {public st ...

  8. 有苦有乐的算法 --- 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两种数

    题目 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两组数 例: [2,4,3,2,5,4] ⇒ [3,5] [1,4,6,3,7,8,3,2,1,2,6,6,7,8] ⇒ [6,4] ...

  9. 数组和矩阵问题:奇数下标都是奇数或者偶数下标都是偶数

    [题目] 给定一个长度不小于2的数组 arr, 实现一个函数调整 arr, 要么让所有的偶数下标都是偶数,要么让所有的奇数下标都是奇数. [题目] 如果 arr 的长度为 N,函数要求时间复杂度为 O ...

最新文章

  1. 人脸识别数据集精粹(下)
  2. 不要做浮躁的嵌入式系统工程师
  3. CTF web题总结--SSRF
  4. 织梦cms技巧:织梦登录后台显示空白页的解决办法
  5. 瑞幸:不会死,也没有稳
  6. python画图视频_如何在视频文件的第一帧上画图,然后继续显示整个视频
  7. ubtunu查看服务器信息,ubuntu查看服务器地址
  8. html 上传文件_【实战篇】记一次文件上传漏洞绕过
  9. SQL Server 版本变更检查
  10. 阿里研究院安筱鹏:云计算推动企业迈向高频竞争时代
  11. 奥图码投影连接服务器没信号,奥图码投影机常见故障维修步骤
  12. Java DES 加密解密工具类实现
  13. Element UI 中国省市区级联数据
  14. 快手上用计算机打歌的名儿叫什么意思,快手起什么名字容易火?快手网名怎么起独特...
  15. 轻松玩转“项目管理” 群硕软件PMS正式发布
  16. 在线密码生成工具推荐
  17. PPP / PPPoE
  18. 华为机试 - 最大矩阵和
  19. 【课程笔记】李弘毅2020 Deep Learning for Human Language Processing
  20. mysql映射mapper_这下够清楚了吧!详解Mybatis的Mapper映射文件

热门文章

  1. 创投及科技大咖推荐门户
  2. GBase 8a查看和清理故障恢复状态Failover的方法
  3. Look into Person: Self-supervised Structure-sensitive Learning and A New Benchmark for Human Parsing
  4. 易语言学习(基础入门)
  5. 支付系统接口性能压力测试TPS优化之路
  6. 大厂面试官喜欢这样问Redis,双写一致性、并发竞争、线程模型,我整理好了
  7. 找回童年乐趣,在线玩超级玛丽、冒险岛、魂斗罗、坦克大战等经典游戏
  8. html树形菜单可选择,jquery树形选择器
  9. 魅族会上鸿蒙系统吗,魅族官宣入驻鸿蒙系统生态,魅族手表更多细节曝光
  10. 计算机应用研究参考文献格式,计算机应用研究外文文献 哪里有计算机应用研究参考文献...