牛客网 剑指offer-调整数组顺序使奇数位于偶数前面

来源:互联网 发布:数据不会说谎 编辑:程序博客网 时间:2024/06/04 00:49


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

问题分析:这道题是我看通过的代码做出来的,在看了别人的思路之后,有一种恍然大悟的感觉,同时,也感到编程的乐趣。在这里主要分析两种思路:
方法一:类似冒泡算法,前偶后奇数就交换
代码如下:

public class Solution {    public void reOrderArray(int [] array) {        for(int i = 0; i <array.length - 1; i++){      for(int j = 0; j < array.length - 1; j++){          if(array[j] % 2 == 0 && array[j + 1] % 2 ==1){              int t = array[j];              array[j] = array[j + 1];              array[j + 1] = t;          }      }      }    }}


方法二:首先统计奇数的个数,然后新建一个等长数组,设置两个指针,奇数指针从0开始,偶数指针从奇数个数的末尾开始 遍历,填数。代码如下:

public class Solution {    public void reOrderArray(int [] array) {        if(array.length == 0 || array.length == 1){            return ;        }        int num = 0;        int startIndex = 0;        int[] newArray = new int[array.length];        for(int i = 0; i < array.length; i++){            if(array[i] % 2 == 1)                num++;        }        for(int i = 0; i < array.length; i++){            if(array[i] % 2 == 1){                newArray[startIndex++] = array[i];            }else{                newArray[num++] = array[i];            }        }        for(int i = 0; i < array.length; i++){            array[i] = newArray[i];        }    }}
阅读全文
0 0