《剑指offer》(十三)-调整数组顺序使奇数位于偶数前面(java)

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

考点:数组

题目描述

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

格式要求

public class Solution{
   punlic void reOrderArray(int[] Array){

  }
}

解题一-移动数组元素

1.思路

参考快速排序

  • i++往前走碰到偶数停下来,j = i+1
  • a[j]为偶数,j++前进,直到碰到奇数
  • a[j]对应的奇数插到a[i]位置,j经过的j-i个偶数依次后移
  • 如果j==len-1时还没碰到奇数,证明ij之间都为偶数了,完成整个移动
《剑指offer》(十三)-调整数组顺序使奇数位于偶数前面(java)_第1张图片
image.png

这道题就是将数组分为奇数部分和偶数部分,每遍历到一个奇数,就迭代地将其放入前面奇数部分,每遍历到一个偶数,就继续遍历。
相当于任意奇数都小于任意偶数,所有奇数都相等,所有偶数都相等,然后使用快速排序排序数组。

2.代码

public class Solution {
    public void reOrderArray(int [] array) {
        if(array==null||array.length==0){
            return;
        }
        for(int i=0;i 0 && (array[cur - 1] % 2 == 0)){
                    array[cur] = array[cur - 1];
                    cur--;
                }
                array[cur]=temp;
            }
            // 否则当前元素是偶数,无需移动
        }
    }
}

解题二-使用两个队列

1.思路
使用两个队列,一个存奇数,一个存偶数,然后依次将数赋值回原数组
2.代码

public class Solution {
    public void reOrderArray(int [] array) {
        if(array==null||array.length==0){
            return;
        }
        Queue oddQueue=new LinkedList<>();
        Queue evenQueue=new LinkedList<>();
        for(int i=0;i();
^

你可能感兴趣的:(《剑指offer》(十三)-调整数组顺序使奇数位于偶数前面(java))