1. 程式人生 > >劍指offer-13:調整陣列順序使奇數位於偶數前面

劍指offer-13:調整陣列順序使奇數位於偶數前面

題目描述

輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

思路

參考插入排序法
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)+" "); } } }