剑指Offer——调整数组顺序使奇数位于偶数前面

1、题目描述

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

2、代码实现

 1 package com.baozi.offer;
 2 
 3 import java.util.Arrays;
 4 
 5 /**
 6  *  输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,
 7  * 所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
 8  *
 9  * @author BaoZi
10  * @create 2019-07-11-15:26
11  */
12 public class Offer10 {
13     public static void main(String[] args) {
14         int[] array = new int[]{1, 2, 4, 6, 3, 7, 9};
15         Offer10 offer10 = new Offer10();
16         offer10.reOrderArray(array);
17         System.out.println(Arrays.toString(array));
18     }
19 
20     public void reOrderArray(int[] array) {
21         //定义两个ArrayList变量,分别存放数组中的基数和偶数
22         java.util.ArrayList<Integer> list1 = new java.util.ArrayList<>();
23         java.util.ArrayList<Integer> list2 = new java.util.ArrayList<>();
24         for (int i = 0; i < array.length; i++) {
25             //任何一个数和1进行与操作之后,如果是偶数最后的结果就是全零,如果是奇数最后的结果就是为1
26             if ((array[i] & 1) != 1) {
27                 list1.add(array[i]);
28             } else {
29                 list2.add(array[i]);
30             }
31         }
32         int index = 0;
33         //根据题目的要求,数组中的奇数全部位于偶数的前面,所以先要把list2中的元素存入到原数组中
34         for (int i = 0; i < list2.size(); i++) {
35             array[index] = list2.get(i);
36             index++;
37         }
38         //然后再把偶数全部存入到原数组中
39         for (int i = 0; i < list1.size(); i++) {
40             array[index] = list1.get(i);
41             index++;
42         }
43     }
44 }

 

posted @ 2019-07-11 15:33  包子的百草园  阅读(142)  评论(0编辑  收藏  举报