调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

因为这道题目给定的方法没有返回值,也就是说我们最后要改变原数组,所以我考虑直接在原数组上面操作。

我的想法大致是这样的:

  先记录下第一个偶数的位置evenIndex,然后从这个位置往后找,直到找到一个奇数。这样在evenIndex和这个奇数之间就全都是偶数了,将所有偶数往后移动一个位置,再将这个奇数插入到第一个偶数的位置,这样就完成了一个奇数位置的调整。不过还要改变一下evenIndex的位置,因为它已经向后移动了一个位置。按照这个方法,遍历一遍数组也就调整好了奇数和偶数的位置了。

 1 public void reOrderArray(int [] array) {
 2         int evenIndex = array.length;
 3 
 4         //记录第一个偶数的位置
 5         for (int i=0; i<array.length; i++) {
 6             if (array[i] % 2 == 0) {
 7               evenIndex = i;
 8               break;
 9             }
10         }
11 
12         for (int i=evenIndex+1; i<array.length; i++) {
13 
14             if (array[i] % 2 != 0) {
15                 int temp = array[i];
16                 for (int j=i; j>evenIndex; j--) {
17                     array[j] = array[j-1];
18                 }
19                 array[evenIndex] = temp;
20                 evenIndex++;
21             }
22         }
23     }

 

posted @ 2018-04-18 17:42  _weirdly  阅读(119)  评论(0编辑  收藏  举报