題目描述
輸入一個整數(shù)數(shù)組爱沟,實現(xiàn)一個函數(shù)來調(diào)整該數(shù)組中數(shù)字的順序,使得所有的奇數(shù)位于數(shù)組的前半部分匆背,所有的偶數(shù)位于位于數(shù)組的后半部分呼伸,并保證奇數(shù)和奇數(shù),偶數(shù)和偶數(shù)之間的相對位置不變钝尸。
import java.util.ArrayList;
public class Solution {
public void reOrderArray(int [] array) {
ArrayList<Integer> list = new ArrayList<>();
//第一次遍歷取出所有奇數(shù)
for(int i=0; i<array.length; i++){
if(array[i]%2!=0){
list.add(array[i]);
}
}
//第二次遍歷取出所有偶數(shù)
for(int i=0; i<array.length; i++){
if(array[i]%2==0){
list.add(array[i]);
}
}
//第二次遍歷取出所有偶數(shù)
for(int i=0; i<array.length; i++){
array[i]=list.get(i);
}
}
}
第二遍做的時候括享,如果不考慮保持原有順序搂根,比較好的做法:
import java.util.ArrayList;
public class Solution {
public void reOrderArray(int [] array) {
//用兩個指針,一個指向頭部铃辖,一個指向尾部
int a = 0;
int b = array.length-1;
while(a<b){
//如果前端是奇數(shù)
if(array[a]%2!=0){
a++;
continue;
}
//如果后端是偶數(shù)
if(array[b]%2==0){
b--;
continue;
}
//如果前端是偶數(shù)剩愧,后端是奇數(shù),交換位置
if(array[a]%2==0 && array[b]%2!=0){
int tmp = array[a];
array[a] = array[b];
array[b] = tmp;
a++;
b--;
}
}
}
}
當(dāng)然了娇斩,題目要求保持原有的奇數(shù)和奇數(shù)順序仁卷、偶數(shù)和偶數(shù)的順序,如果再要求只能在原數(shù)組上進(jìn)行操作:
import java.util.ArrayList;
public class Solution {
public void reOrderArray(int [] array) {
/*
類似冒泡排序犬第,每次使最右邊的偶數(shù)沉底
*/
for(int i=0; i<array.length; i++){
for(int j=0; j<array.length-1-i; j++){
if(array[j]%2==0 && array[j+1]%2!=0){
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
}
}