调整数组顺序使得奇数位于偶数前面,且奇数与奇数,偶数与偶数之间的位置相对不变

package com.dixin.temp;

import org.junit.Test;

/**
 * Created by admin on 2017/10/23.
 */
public class F {
    /**
     * 调整数组顺序使得奇数位于偶数前面,且奇数与奇数,偶数与偶数之间的位置相对不变
     */
    //@1 再创建一个数组  时间复杂度为O(n),空间复杂度为O(n)
    public void reOrderArray(int [] array) {
        int len=array.length;
        int []newArray=new int[len];//定义一个新数组,即为结果数组
        int oldCount=0;
        int newCount=0;
        for(int i=0;i//遍历数组查找出奇数的数量
            if(array[i]%2==1) {
                oldCount++;
            }
        }
        for(int i=0;iif(array[i]%2==1) {//奇数从前面开始加入
                newArray[newCount++]=array[i];
            } else {//偶数从刚才查出来的奇数个数的末端开始加入
                newArray[oldCount++]=array[i];
            }
        }
        for(int i=0;i//最终将新数组的值赋给老数组,即完成了奇数位于偶数前面
        }
    }

    //@2 类似于冒泡排序,相邻前偶后奇就交换位置
    public void reOrderArray2(int [] array) {
        for(int i=0;ifor(int j=array.length-1;j>i;j--) {
                if(array[j]%2==1&&array[j-1]%2==0) {//交换位置
                    int tmp=array[j];
                    array[j]=array[j-1];
                    array[j-1]=tmp;
                }
            }
        }
    }
    @Test
    public void test() {
        int a[]={4,23,546,87,3,6};
        reOrderArray2(a);
        for(int b:a) {
            System.out.print(b+" ");
        }
    }
}

你可能感兴趣的:(编程题,剑指offer,class)