题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有
的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数
和奇数,偶数和偶数之间的相对位置不变。
思路1:
- 利用插入排序算法的思想解决问题;
代码如下:
public class Solution {
public void reOrderArray(int [] array) {
int len = array.length;
int ret = 0;//用来记录数组中已经放好的奇数的位置
for (int i = 0; i < len; i++) {
if ((array[i]%2) == 1){
int cur = i;
while(cur > ret){
int tmp = array[cur];
array[cur] = array[cur-1];
array[cur-1] = tmp;
cur--;
}
ret++;
}
}
}
}
思路2:
- 初始化两个队列,一个负责将奇数入队列,一个负责将偶数入队列
- 先将奇数出队列放入数组,再讲偶数出队列放入数组即可;
代码如下:
import java.util.LinkedList;
import java.util.Queue;
public class Solution1 {
private boolean isOddNum(int num){
if ((num&1) == 1){
return true;
}
return false;
}
public void reOrderArray(int [] array) {
if (array == null || array.length <= 1){
return;
}
Queue<Integer> oddQueue = new LinkedList<>();
Queue<Integer> evenQueue = new LinkedList<>();
for (int i = 0; i < array.length; i++) {
if (isOddNum(array[i])){
oddQueue.offer(array[i]);
}else {
evenQueue.offer(array[i]);
}
}
int i = 0;
while(!oddQueue.isEmpty()){
array[i++] = oddQueue.poll();
}
while(!evenQueue.isEmpty()){
array[i++] = evenQueue.poll();
}
}
}