如果不考慮奇數和奇數,偶數和偶數之間的相對位置不變。那么只需要兩個指針分別指向數組的頭和尾,依次比較。
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; } } } }