剑指Offer:调整数组顺序使奇数位于偶数前面【21】

题目描述

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

解题分析

关于排序算法的稳定性

  排序前后两个相等的数相对位置不变,则算法稳定。

  具有稳定性的排序算法有:

  • 冒泡排序
  • 归并排序
  • 基数排序
  • 直接插入排序
  • 这般插入排序

  不稳定性的排序算法有:

  • 堆排序
  • 快速排序
  • 希尔排序
  • 直接选择排序

稳定排序解决问题

  因为要保证奇数或偶数元素的相对位置不变,很直接就想到的是稳定性排序算法,比较简单的是冒泡和直接插入。使用插入排序法的思想来进行数组整理,不需要额外空间,时间复杂度也很低。

  我们的整体策略是这样的:设置一个栅栏,栅栏左边的元素是奇数,右边的是偶数,指针从0开始依次向后遍历,如果当前元素是偶数,则后移,是奇数则和栅栏右侧第一个元素交换,栅栏右移一位。

  

Java题解

package arr;

public class ReOrderArray {
public static void reOrderArray(int [] array) { int brace =-1;
int ptr =0;
while (ptr<array.length)
{
if(array[ptr]%2==0)
{
ptr++;
continue;
}
swap(array,ptr++,++brace);
} } public static void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
} public static void main(String[] args) {
int[] arr = {1,3,2,3,4,1,5,6};
reOrderArray(arr);
for (int e : arr)
System.out.println(e);
}
}

剑指Offer:调整数组顺序使奇数位于偶数前面【21】的更多相关文章

  1. 剑指OFFER——调整数组顺序使奇数位于偶数前面

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

  2. 剑指Offer 调整数组顺序使奇数位于偶数前面

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

  3. 用js刷剑指offer(调整数组顺序使奇数位于偶数前面)

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 牛客网链接 js代码 ...

  4. 剑指offer--8.调整数组顺序使奇数位于偶数前面

    习惯了简单 ------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指数:422906 本题知识点: 数组 题目 ...

  5. 剑指Offer-13.调整数组顺序使奇数位于偶数前面(C++/Java)

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

  6. 剑指offer 调整数组顺序使得奇数位于偶数前面

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class Solution { public:     void  ...

  7. 剑指offer:调整数组顺序使奇数位于偶数前面

    题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...

  8. 【Java】 剑指offer(21) 调整数组顺序使奇数位于偶数前面

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇 ...

  9. 剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面

    剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面2013-11-30 02:17 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部 ...

随机推荐

  1. Delphi GDI对象之脱屏位图(Offscreen Bitmaps),也叫内存位图

    http://www.cnblogs.com/pchmonster/archive/2012/07/09/2583613.html 脱屏位图(Offscreen Bitmaps) 脱屏位图,也叫内存位 ...

  2. AC日记——【模板】线段树 2 洛谷 P3373

    P3373 [模板]线段树 2387通过1.8K提交标签难度 提高+/省选- 提交 讨论 题解 最新讨论 更多讨论 2333最后三个点卡常数.迷之RE感觉这题很迷啊好像一共三组测试数据.友情提示:开l ...

  3. 在Eclipse中打开Hadoop工程

    1. 安装虚拟机,我用的是VMware Workstation 12 Player 2. 在VM中安装Ubuntu,我用的镜像文件是ubuntu-15.10-desktop-amd64.iso 3. ...

  4. PythonWeb开发教程(二),搭建第一个django项目

    这篇写怎么创建django项目,以及把django项目运行起来. 1.创建django项目 a.使用命令创建,安装完django之后就有django-admin命令了,执行命令创建即可,命令如下:   ...

  5. Object 转 String

    做项目中 : map 为Map<String,Object> a.setmoney(new BigDecimal((String)map.get("money"))); ...

  6. Network | Public-key cryptography

    公开密钥加密public-key cryptography,也称为非对称(密钥)加密. 非对称密钥,是指一对加密密钥与解密密钥,这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密 ...

  7. 管理SQL Server监控

    http://blog.csdn.net/DBA_Huangzj/article/category/1133081 http://www.cnblogs.com/bhtfg538/archive/20 ...

  8. Linux 端口防火墙

    举例: 开放10000端口的解决步骤如下: 1.修改/etc/sysconfig/iptables文件,增加如下一行: -A RH-Firewall-1-INPUT -m state --state ...

  9. Linux有问必答:如何检查Linux的内存使用状况

    -1. /proc/meminfo11% -2. atop20% -3. free29% -4. GNOME System Monitor35% -5. htop41% -6. KDE System ...

  10. 每天进步一点点—SQL优化

    一.           SQL优化 1.   通过show status 命令了解各种SQL的运行频率 mysql>show status like 'Com_%'; +----------- ...