劍指offer-13:調整陣列順序使奇數位於偶數前面
阿新 • • 發佈:2018-12-05
題目描述
輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
思路
參考插入排序法
1.要想保證原有次序,則只能順次移動或相鄰交換。
2.i從左向右遍歷,找到第一個偶數。
3.j從i+1開始向後找,直到找到第一個奇數。
4.將[i,…,j-1]的元素整體後移一位,最後將找到的奇數放入i位置,然後i++。
5.終止條件:j向後遍歷查詢失敗。
程式碼
public class Solution13 {
/**
* 1.要想保證原有次序,則只能順次移動或相鄰交換。
* 2.i從左向右遍歷,找到第一個偶數。
* 3.j從i+1開始向後找,直到找到第一個奇數。
* 4.將[i,...,j-1]的元素整體後移一位,最後將找到的奇數放入i位置,然後i++。
* 5.終止條件:j向後遍歷查詢失敗。
*/
public void reOrderArray(int [] a) {
if(a==null||a.length==0)
return;
int i = 0,j;
while(i<a.length){
while(i<a.length&&!isEven(a[i]))
i++;
j = i+1;
while(j<a.length&&isEven(a[j]))
j++ ;
if(j<a.length){
int tmp = a[j];
for (int j2 = j-1; j2 >=i; j2--) {
a[j2+1] = a[j2];
}
a[i++] = tmp;
}else{// 查詢失敗
break;
}
}
}
boolean isEven( int n){
if(n%2==0)
return true;
return false;
}
public static void main(String[] args) {
int[] arr={1,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
Solution13 solu = new Solution13();
solu.reOrderArray(arr);
for (int a :arr) {
System.out.print(String.valueOf(a)+" ");
}
}
}