劍指offer-調整數組順序使奇數位於偶數前面


調整數組順序使奇數位於偶數前面

一、問題描述

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

二、算法思路

這是一個插入排序的變種,實際上比插入排序更加簡單。
插入排序的主要任務是維護一個部分有序的數組,插入使得有序部分不斷擴大。而這里的主要任務可以看作是維護一個(不改變順序的)奇數數組,因為只要不兩兩交換,那么偶數的先后順序是不會變動的,所以等排好了奇數部分,偶數部分自然也就大功告成了。

三、算法實現

3.1、Java實現版

public class Solution {
    public void reOrderArray(int [] array) {
        int i=-1;//i表示奇數序列最后一個元素的下標
        for(int k=0;k<array.length;k++){
            if(array[k]%2==1){//如果array[k]是奇數
                int temp=array[k];
                while(k>i+1){
                    array[k]=array[k-1];
                    k--;
                }
                array[i+1]=temp;
                i++;
            }
        }
    }
}

解釋:代碼中的i表示的是奇數序列最后一個元素的下標。當找到新的奇數時,先將這個奇數保存,把從它往左的到第一個偶數整體往右移動一個單位,並在i+1的地方放上之前保存的奇數,到此,一趟循環已經完成。如果是偶數的話,直接跳過。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com