zoukankan      html  css  js  c++  java
  • 调整数组顺序使奇数位于偶数前面

    
    

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

    并保证奇数和奇数,偶数和偶数之间的相对位置不变。

    思路一: // 冒泡排序法,如果两个相邻的是前偶后奇数,就交换  O(n^2)

    代码:

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 class Solution {
     5 public:
     6         // 冒泡排序法,如果两个相邻的是前偶后奇数,就交换
     7     void reOrderArray(vector<int> &array)
     8     {
     9         vector<int> arr2;
    10         int len = array.size();
    11         for(int i = 0; i < len; i++)
    12         {
    13             for(int j = 0; j < len-1; j++)
    14             {
    15                 if (array[j] % 2 == 0 && array[j+1] % 2 != 0)
    16                 {
    17                     int temp = array[j];
    18                     array[j] = array[j+1];
    19                     array[j+1] = temp;
    20                 }
    21             }
    22         }
    23     }
    24 };
    25 
    26 int main()
    27 {
    28     Solution s;
    29     vector<int> vec = {3,4,5,1,2};
    30     s.reOrderArray(vec);
    31     for(int i = 0; i< vec.size(); i++)
    32     {
    33         cout << vec[i]<<" ";
    34     }
    35     return 0;
    36 }

    思路二:O(n)但是用了一个辅助数组,牺牲空间换取时间效率

    //利用一个辅助数组,先把奇数放进去,然后把偶数放进去,最后把辅助数组的值拷贝给原数组

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 class Solution {
     5 public:
     6     //利用一个辅助数组,先把奇数放进去,然后把偶数放进去,最后把辅助数组的值拷贝给原数组
     7     void reOrderArray(vector<int> &array)
     8     {
     9         vector<int> arr2;
    10         int len = array.size();
    11         for( int i = 0; i < len; i++)
    12         {
    13             if (array[i] % 2 != 0)
    14                 arr2.push_back(array[i]);
    15         }
    16         for( int i = 0; i < len; i++)
    17         {
    18             if (array[i] % 2 == 0)
    19                 arr2.push_back(array[i]);
    20         }
    21         for(int i = 0; i< arr2.size(); i++)
    22         {
    23             array[i] = arr2[i];
    24         }
    25         // 也可以进行赋值
    26         // array.assign(arr2.begin(),arr2.end());
    27     }
    28 };
    29 int main()
    30 {
    31     Solution s;
    32     vector<int> vec = {3,4,5,1,2};
    33     s.reOrderArray(vec);
    34     for(int i = 0; i< vec.size(); i++)
    35     {
    36         cout << vec[i]<<" ";
    37     }
    38     return 0;
    39 }
  • 相关阅读:
    Shell IFS
    Crontab
    linux awk
    free
    条件语句练习2
    条件语句练习
    打印菜单
    条件测试语法
    read 命令
    jQuery(实例)
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12442559.html
Copyright © 2011-2022 走看看