方法1:
若不考虑性能:
使用一个新的数组target
遍历原数组 发现奇数则复制到target中 然后偶数 最后显示
1 import java.util.Arrays; 2 3 public class Sperate_odd_even { 4 5 public static void sperate(int[] a) 6 { 7 int index=0; 8 int[] target=new int[a.length]; 9 for(int i=0;i<a.length;i++) 10 { 11 if(a[i]%2!=0) 12 { 13 target[index]=a[i]; 14 index++; 15 } 16 } 17 18 for(int i=0;i<a.length;i++) 19 { 20 if(a[i]%2==0) 21 { 22 target[index]=a[i]; 23 index++; 24 } 25 } 26 27 28 29 System.out.println(Arrays.toString(target)); 30 } 31 32 33 public static void main(String[] args) { 34 int a[]={2,1,5,3,4,8,12,13,7,77,122}; 35 System.out.println(Arrays.toString(a)); 36 sperate(a); 37 38 39 40 41 42 } 43 44 }
方法2:
算法时间复杂度为O(n)
使用2个指针不断判断奇偶性 然后互换位置
1 public static void sperate_two(int[] a) 2 { 3 int i=0;//定义坐标下标 4 int j=a.length-1;//定义右边下标 5 int temp;//跑龙套的 6 while(i<j)//开始遍历 7 { 8 while(a[i]%2!=0)//如果左边遇到奇数则继续遍历 9 i++; 10 while(a[j]%2==0)//同理右边 11 j--; 12 13 if(i<j)//交换 14 { 15 temp=a[i]; 16 a[i]=a[j]; 17 a[j]=temp; 18 } 19 } 20 System.out.println(Arrays.toString(a)); 21 } 22