题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
public class Solution {
public void reOrderArray(int [] array) {
}
}
解题思路
1、暴力法
声明一个新的数组,遍历两次数组,第一次将奇数取出,第二次将偶数取出,时间复杂度、空间复杂度并不友好。
2、插入排序的思想
遍历数组,记录奇数出现的次数count,找到奇数,将奇书前的数向后移动一位,将奇数插入到count位。
源码
public class Solution {
public void reOrderArray(int [] array) {
//记录奇数出现的个数
int count = 0;
//遍历数组
for(int i=0;i<array.length;i++){
//发现奇数
if(array[i]%2==1){
//保存当前奇数位置
int j = i;
//保存当前奇数值
int key= array[i];
//将当前奇数之前的偶数全部向后移动一位
while(j>count){
array[j]=array[j-1];
j--;
}
//将奇数插入到偶数之前
array[count]=key;
//更新奇数出现的个数
count++;
}
}
}
}