思路
M1=>入队-出队(队列法),一次遍历,将单数入队列A,将双数入队列B,然后再次遍历A出队完毕后再B出队,出队的元素对array重新赋值。

M2=> 双遍历,有序赋值,首先创建一个大小与array一样的数组,通过第一次遍历array,将arrya种的单数赋值给tempArray,再次遍历array将双数赋值给tempArray。

结果
M1=>
运行时间:392ms
占用内存:25644KB

M2=>
运行时间:399ms
占用内存:25056KB

代码

M1=>
 public int[] reOrderArray(int[] array) {
        ArrayDeque<Integer> singleNum = new ArrayDeque<>();
        ArrayDeque<Integer> doubleNum = new ArrayDeque<>();

        for (int i = 0; i < array.length; i++) {
            if (array[i] %2 == 0)
                doubleNum.addLast(array[i]);
            else
                singleNum.addLast(array[i]);
        }

        for (int i = 0; i < array.length; i++) {
            if (!singleNum.isEmpty()) array[i] = singleNum.pollFirst();
            else array[i] = doubleNum.pollFirst();
        }
        System.out.println(Arrays.toString(array));

        return array;

}

M2=>
public int[] reOrderArray(int[] array) {
        int[] tempArray = new int[array.length];
        int currentIndex = 0;

        for (int i : array) {
            if (i % 2 != 0) tempArray[currentIndex++] = i;
        }

        for (int i : array) {
            if (i % 2 == 0) tempArray[currentIndex++] = i;
        }

        System.out.println(Arrays.toString(tempArray));

        return tempArray;

}