• 调整数组顺序使奇数位于偶数前面


    调整数组顺序使奇数位于偶数前面
    • 参与人数:3497时间限制:1秒空间限制:32768K
    • 通过比例:17.74%
    • 最佳记录:0 ms|0K(来自  zhb186

    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
     1 /* C++
     2     如果题目要求保证奇数和奇数、偶数和偶数之间的相对位置不变,
     3     就可以使用vector的erase和push_back进行操作。
     4     顺序遍历数组arr,遇到偶数,则删除该值,并将该值push到arr数组的末尾。
     5     时间复杂度为O(n)。
     6     注意:需要设置一个index,控制处理的数值个数,当处理次数等于数组大小时结束,
     7         否则当已将所有偶数放在数组后面时,将进入死循环。
     8 */
     9 
    10 void reOrderArray(vector<int> &arr){
    11     int tmp;
    12     int index = 0;
    13     for (vector<int>::iterator it = arr.begin(); it != arr.end(); ){
    14         index++; 
    15         if ( (*it & 1) == 0){    // 偶数
    16             tmp = *it;
    17             it = arr.erase(it);
    18             arr.push_back(tmp);
    19         }
    20         else
    21             it++;
    22         if (index == arr.size())
    23             return;
    24     }
    25 }
     1 /* C
     2     如果不要求保证奇数和奇数、偶数和偶数之间的相对位置不变!
     3     1、最简单的思路:
     4         与上面的C++方法一样,但是在C中,从头扫描数组,每碰到一个偶数,
     5         就拿出该数字,把该数字后面的所有数字往前移动1位,然后把该数字放在数组末尾。
     6         时间复杂度为O(n^2)。
     7     2、另一种思路:
     8         设置两个指针p1、p2,分别指向数组的第一个和最后一个数字,p1只向后移动,p2指向前移动。
     9         如果p1指向的为偶数,且p2指向的为奇数,则交换这两个数字。
    10         时间复杂度为:O(n)。
    11        在实现中,使用了函数指针,这样就给出了一个模型,可以解决一系列同类型的问题。
    12        eg:所有负数都放在非负数前面;能被3整除的数放在不能被3整除的数前面,等等。
    13 */
    14 bool isEven(int n){
    15     return (n & 1) == 0;
    16 }
    17 void reOrderArray(int *a, int len, bool (*func)(int)){
    18     if (a == NULL || len == 0)
    19         return;
    20     int p1 = 0, p2 = len-1;
    21     while(p1 < p2){
    22         while(p1 < len && !func(a[p1]))    // 向后移动p1,直到p1指向偶数
    23             p1++;
    24         while(p2 >= 0 && func(a[p2]))    // 向前移动p2,直到p2指向奇数
    25             p2--;
    26         if (p1 < p2){
    27             int tmp = a[p1];
    28             a[p1] = a[p2];
    29             a[p2] = tmp;
    30         }
    31     }
    32 }
    33 int main(){
    34     int a[] = {1,2,3,4,5,6,7};
    35     reOrderArray(a, 7, isEven);
    36     for (int i = 0; i < 7;i++)
    37         cout << a[i] << endl;
    38     return 0;
    39 }
  • 相关阅读:
    路由系统
    flask_sqlalchemy的使用
    input()输入语句
    注释
    Python 2017.1.5
    关于object网页播放器参数的设置,推荐博客系列
    LRU缓存,大神写的,值得借鉴
    object,网页播放器的相关属性设置
    js的apply和call方法
    count()函数在count()中参数的讨论
  • 原文地址:https://www.cnblogs.com/qianmacao/p/4870975.html
Copyright © 2020-2023  润新知