奇数位于偶数的前半部分

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

//两个思路吧,第一个思路:类似冒泡算法,前偶后奇数就交换: 


class Solution {
public:
    void reOrderArray(vector<int> &array) {
 
         
        for (int i = 0; i < array.size();i++)
        {
            for (int j = array.size() - 1; j>i;j--)
            {
                if (array[j] % 2 == 1 && array[j - 1]%2 == 0) //前偶后奇交换
                {
                    swap(array[j], array[j-1]);
                }
            }
        }
    }
};

//第二个思路:再创建一个数组 


class Solution{
public:
    void reOrderArray(vector<int> &array) {
 
        vector<int> array_temp;
        vector<int>::iterator ib1, ie1;
        ib1 = array.begin();
 
 
        for (; ib1 != array.end();){            //遇见偶数,就保存到新数组,同时从原数组中删除
            if (*ib1 % 2 == 0) {
                array_temp.push_back(*ib1);
                ib1 = array.erase(ib1);
            }
            else{
                ib1++;
            }
 
        }
        vector<int>::iterator ib2, ie2;
        ib2 = array_temp.begin();
        ie2 = array_temp.end();
 
        for (; ib2 != ie2; ib2++)             //将新数组的数添加到老数组
        {
            array.push_back(*ib2);
        }
    }
};

 * 1.要想保证原有次序,则只能顺次移动或相邻交换。

 * 2.i从左向右遍历,找到第一个偶数。

 * 3.j从i+1开始向后找,直到找到第一个奇数。

 * 4.将[i,...,j-1]的元素整体后移一位,最后将找到的奇数放入i位置,然后i++。

 * 5.終止條件:j向後遍歷查找失敗。

 */

作者:雨落天涯
链接:https://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593
来源:牛客网

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        int num=array.size();
        for(int i=0; i<num;i++)//找到第一个偶数位置
           { int temp;
            if((array[i]%2)==0)
             {
               for(int j=i;j<num;j++)
               {
                 if((array[j]%2)==1)//找到偶数后第一个奇数位置,从第一个偶数位开始后移
                 {
                    temp=array[j];
                     while(j>i)
                      {
                        array[j]=array[j-1];//将第一个偶数位开始后移
                        j--;
                      }
                        array[j]=temp;//将该奇数前移到第一个偶数位
                        i++;//第一个偶数位置后移一次
                  }
               }
                  break;
         
            }
        
       }
            
      //
        
    }
};
答

猜你喜欢

转载自blog.csdn.net/qq_40086556/article/details/81703343