博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
调整数组顺序使奇数位于偶数前面
阅读量:5904 次
发布时间:2019-06-19

本文共 1364 字,大约阅读时间需要 4 分钟。

题目描述:

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

思路:

  这道题首先就能想到一个思路,运用快速排序的思想,设置前后两个指针,分别从数组的前后两端开始遍历,前指针遇到偶数,后指针遇到奇数交换之。

public class Solution {    public void reOrderArray(int [] array) {                 int left = 0, right = array.length-1;                 while(left < right) {            while(left < right && !isEven(array[left]))                left ++;            while(left < right && isEven(array[right]))                right ++;                     swap(array, left, right);        }             }         public boolean isEven(int ele) {        return (ele & 1) == 0;    }         public void swap(int[] arr, int i, int j) {        int t = arr[i];        arr[i] = arr[j];        arr[j] = t;    }}

但是上面这种解法其实是有问题的,因为快速排序是不稳定的排序,而题目要求稳定性。那么就要考虑冒泡排序和插入排序了。冒泡排序无非是交换前偶后奇的情况,插入排序是找到一个奇数插入到第一个偶数前面。。。

下面是基于插入排序思想的一种解法:

public class Solution {    public void reOrderArray(int [] array) {                if(array == null || array.length <= 1)            return ;        for(int i=0;i
=0&&isEven(array[j])){ array[j+1]=array[j]; j--; } array[j+1]=temp; } } } public boolean isEven(int ele) { return (ele & 1) == 0; } }

 

转载于:https://www.cnblogs.com/wxisme/p/5295134.html

你可能感兴趣的文章
web.xml 中CharacterEncodingFilter类的学习
查看>>
贪吃蛇逻辑代码
查看>>
ASP.NET视频教程 手把手教你做企业论坛网站 视频教程
查看>>
[LeetCode] Meeting Rooms II
查看>>
从Swift学习iOS开发的路线指引
查看>>
Scribes:小型文本编辑器,支持远程编辑
查看>>
ssh 安装笔记
查看>>
3-继承
查看>>
海归千千万 为何再无钱学森
查看>>
vue2.0 仿手机新闻站(六)详情页制作
查看>>
JSP----九大内置对象
查看>>
Java中HashMap详解
查看>>
delphi基本语法
查看>>
260. Single Number III
查看>>
Hadoop生态圈-Kafka的完全分布式部署
查看>>
[MODx] Build a CMP (Custom manager page) using MIGX in MODX 2.3 -- 1
查看>>
jQuery自动完成点击html元素
查看>>
[算法]基于分区最近点算法的二维平面
查看>>
webpack多页应用架构系列(七):开发环境、生产环境傻傻分不清楚?
查看>>
笨办法学C 练习1:启用编译器
查看>>