剑指offer第12题:
题目要求:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:
题目要求进行重新排序;
方法一:可以借鉴冒泡排序的思想,如果是偶数在奇数前就交换。但是复杂度是l(n^2)
方法二:定义一个缓冲区即新建一个列表,定义两个指针一个是奇数一个是偶数,分别添加入新的数组;最后将新数组和旧数组进行替换即可,具体代码如下。
public class Solution {
public void reOrderArray(int [] array) {
int [] arrayNew= new int [array.length];
int Odd = 0;
int Begin = 0;
for(int x : array){
if(x%2==1){
Odd++;
}
}
for(int x:array){
if(x%2==1){
arrayNew[Begin++]=x;
}
else{
arrayNew[Odd++]=x;
}
}
for(int i = 0;i<arrayNew.length;i++){
array [i] = arrayNew[i];
}
}
}