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

题目—:

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分 

思路:

1.明确了题目需求,使得奇数位于左边,偶数位于右边;

当左边的元素位奇数,继续;

当右边元素为偶数,继续;

当这两个条件同时都不满足,也就是左边为偶数,右边为奇数,那么就调换两个元素位置。

考虑使用位运算,奇数&1必然=1,偶数&1必然等于0,以此区分是奇数还是偶数。

代码实现:

public static void reOrderArray(int [] array) {
    int i=0;
    int j=array.length-1;
    int temp=0;
   while(i<j){

       if ((array[i]&1)==1){
           i++;
           continue;
       }
       if ((array[j]&1)==0) {
           j--;
           continue;
       }
       temp=array[i];
       array[i]=array[j];
       array[j]=temp;
       i++;
       j--;
   }
   for (int ii=0;ii<array.length;ii++){
       System.out.print(array[ii]+",");
       System.out.println();
   }
}

题目二:

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

思路:

1.从前往后遍历,第一个元素如果是偶数,记住这个 偶数的角标位。如果不是偶数,啥也不干。

2.当遇到偶数的时候,判断这是不是第一个偶数,如果是 记住角标位。

3.当遇到奇数的时候,判断其前面有没有偶数,如果有,则将前面的连续的多个偶数,顺序往后移动一位,然后将奇数插入第一个偶数位置。

具体步骤如下例子:

2,1,8,3,4,9   //index=0  

             index>=0       奇数1 和2 交换位置  然后修改index=1

1,2,8,3,4,9   //index=1

1,3,2,8,4,9   //index=2

              index>=0       奇数3存入临时变量,然后元素2 和8 依次后移,之后将3存入2位置。

1,3,9,2,8,4   //index=3

               index>=0       奇数9存入临时变量,然后元素2 ,8和4 依次后移,之后将9存入2位置。

代码实现:

public static void reOrderArray2(int [] array) {
    int i=0;
    int j=array.length;
    int index=-1;
    if (array.length==0){  //数组为空,啥也不干!
        return;
    }
    while(i<j){
        if ((array[i]&1)==1){
            if (index>=0){
                //和index位置元素交换
                int ss=array[i];
                for (int in=i;in>index;in--)
                    array[in]=array[in-1];
                array[index]=ss;
                index++;
            }
            i++;
            continue;
        }else{
            //这里很关键,需要记住从左边开始的第一个偶数的位置,如果第一个元素就是偶数,这个临界值一定要考虑到。
            //如果第一个元素不是偶数,那当遍历到第一个偶数的时候,开始记住其角标。
            if(i==0)
                index=0;
            if (index<0)
                index=i;
            i++;
            continue;

        }
    }

猜你喜欢

转载自blog.csdn.net/zhangshk_/article/details/81190870