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


如果不考慮奇數和奇數,偶數和偶數之間的相對位置不變。那么只需要兩個指針分別指向數組的頭和尾,依次比較。

1. 如果頭指針指向的數組位置為奇數,那么就判斷尾指針指向的數組位置的奇偶性。如果是奇數,則頭指針后移一個位置,如果是偶數,則尾指針前移一個位置。

2. 如果頭指針指向的數組位置為偶數,那么就判斷尾指針指向的數組位置的奇偶性。如果是奇數,則交換頭尾指針指向的數組元素,如果是偶數,則尾指針前移一個位置。

代碼如下:

public class Q13_ReOrderArray {

    public static void main(String[] args) {
        int []array = {1,2,3,4,5,6,7,8,9,10,11,12,13};
        reOrderArray(array);
        for(int i=0;i<array.length;i++)
        {
            System.out.print(array[i]+" ");
        }
    }
    public static void reOrderArray(int []array)
    {
        int i=0;
        int j=array.length-1;
        while(i<j)
        {
            if(array[i]%2==1)//奇數
            {
                if(array[j]%2==1)//奇數
                {
                    i++;
                }else//偶數
                {
                    j--;
                }
            }else//偶數
            {
                if(array[j]%2==1)//奇數
                {
                    //交換array[i]和array[j]
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }else//偶數
                {
                    j--;
                }
            }
        }
    }
}

 

如果要保證奇數和奇數,偶數和偶數之間的相對位置不變。

首先尋找第一個奇數,並將其放在0號位置。然后將第一個奇數之前的元素全部往后移一位。

依次在第一個奇數之后的元素中尋找奇數,並做移動操作。就可以保證原來的相對順序。

public class q13_reOrderArray {

    public static void main(String[] args) {
        int []array = {2,4,6,1,3,5,7};
        reOrderArray2(array);
        for(int i=0;i<array.length;i++)
        {
            System.out.print(array[i]+" ");
        }
    }
    public static void reOrderArray2(int []array)
    {
        int j=0;//記錄第一個為奇數的位置
        int m=0;//記錄排好序的奇數的最后一個位置
        for(int i=0;i<array.length;i++)
        {    
            if(array[i]%2==1)//找到第一個奇數
            {
                int temp = array[i];//記錄第一個奇數
                int ti=i;
                for(;ti>0;ti--)
                {
                    array[ti]=array[ti-1];//將第一個奇數之前的所有元素往后移一個位置
                }
                array[0] = temp;//將第一個奇數放到array[0]位置
                j=i;
                break;
            }
        }
        for(++j;j<array.length;j++)//依次尋找剩余的奇數
        {
            if(array[j]%2==1)
            {
                int temp = array[j];
                int tj = j;
                for(;tj>m;tj--)
                {
                    array[tj]=array[tj-1];
                }
                array[++m]=temp;
            }
        }
        
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM