剑指offer系列11---调整数组顺序使奇数位于偶数前面

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

【思路】//方法1:前后两个数比较,若前为偶数后为奇数,即调换两者位置(未看懂,不如下面方法)

    //方法2(较好的方法):前后设置两个指针,当前指针指向的数为偶数,后指针指向的数为奇数时,即调换两个数位置。

 1 package com.exe3.offer;
 2 
 3 /**
 4  * 11【题目】输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
 5  *         使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
 6  * 【思路】
 7  * @author WGS
 8  *
 9  */
10 //1 2 3 4 5
11 public class ReOrderOddEven11 {
12     //方法1:前后两个数比较,若前为偶数后为奇数,即调换两者位置
13     public int[]  getOrder2(int[] arr){
14         if(arr==null||arr.length==0){
15             System.out.println("Invalid arrays");
16         }
17         int i,j;
18         for(i=1;i<arr.length;i++){//此处i设为1,方便比较前者
19             int temp=arr[i];
20             if(!isEven(i)){//后者为奇数
21                 
22                 for(j=i-1;j>=0&&(isEven(j));j--){//此处j设为0,即与i设为1的值比较  前者(j)为偶数
23                     arr[j+1]=arr[j];                
24                 }
25                 arr[j+1]=temp;
26             }
27             
28         }
29         return arr;
30     }
31     //判断是否为偶数
32     public boolean isEven(int n){
33         if((n&0x1)==0){
34             return true;
35         }
36         return false;
37     }
38     //方法2(较好的方法):前后设置两个指针,当前指针指向的数为偶数,后指针指向的数为奇数时,即调换两个数位置。
39     public int[]  getOrder(int[] arr){
40         if(arr==null||arr.length==0){
41             System.out.println("Invalid arrays");
42         }
43         int preIndex=0;
44         int endIndex=arr.length-1;
45         while(preIndex<endIndex){//要变成奇+偶组合
46             while(preIndex<endIndex && (arr[preIndex]&0x1)!=0){//是奇数,该数不用换,指针后移
47                 preIndex++;
48             }
49             while(preIndex<endIndex && (arr[endIndex]&0x1)==0){//是偶数,该数不用换,指针前移
50                 endIndex--;
51             }
52             if(preIndex<endIndex){
53                 int temp=arr[preIndex];
54                 arr[preIndex]=arr[endIndex];
55                 arr[endIndex]=temp;
56             }
57         }
58         return arr;
59     }
60     public static void main(String[] args){
61         ReOrderOddEven11 r=new ReOrderOddEven11();
62         int[] arr=new int[]{8,1,2,3,4,5};
63         int[] arr2=r.getOrder(arr);
64         for(int s:arr2){
65             System.out.print(s+" ");
66         }
67     }
68 }
原文地址:https://www.cnblogs.com/noaman/p/5407052.html