zoukankan      html  css  js  c++  java
  • 华为机试题——数组排序,且奇数存在奇数位置,偶数存在偶数位置

    题目要求很简单,就是给你一个数组,对它进行排序,并且排序后,奇数要放在奇数的位置上,偶数要放在偶数的位置上,如果不满足这个规则的话就在数组上填充0

    实现代码如下,文中值得注意的一点就是如何判读这个数字是奇数或者偶数,我想使用位运算是最快速的方法了。

    // test_huawei.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <string.h>
    using namespace std;
    
    
    #define T 10
    int _tmain(int argc, _TCHAR* argv[])
    {
        //实现奇数放在奇数的位置上  偶数放在偶数位置上  如果不是 添0
        int a[T]={1,2,23,1,23,32,56,9,21,33};
        int b[2*T]={0};    //考虑最坏情况  新的数组应该是原数组的两倍大(严格来说是2T-1)
        int i,j,temp;
        for (i=0;i<T;i++)
        {
            for (j=i+1;j<T;j++)
            {
                if (a[i]>a[j])
                {
                    temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;    //冒泡排序
                }
            }
        }
        j=0;
        for (i=0;i<T;i++)
        {
            cout<<a[i]<<"	";
            if (a[i]&1)    //奇数  //使用位与操作  减小运算量
            {
                if ((j+1)&1)//奇数位置
                    b[j]=a[i];
                else
                {
                    b[j]=0;
                    b[j+1]=a[i];
                    j++;
                }
            }
            else  //偶数
            {
                if ((j+1)&1)
                {
                    b[j]=0;
                    b[j+1]=a[i];
                    j++;
                }    
                else
                    b[j]=a[i];
            }
            j++;
        }
        cout<<endl;
        for (i=0;i<2*T;i++)
        {
            cout<<b[i]<<"  ";
        }
        cout<<endl;
        return 0;
    }

    执行效果:

    image

  • 相关阅读:
    ACM XXX1
    最大公约数算法
    struct和typedef struct
    PKU 1012
    素数算法3种
    ZOJ 1088
    学习ios开发计划书
    iphone系统架构以及各层提供的主要服务
    iOS 界面元素尺寸
    开发手机版网站有哪些前端框架?
  • 原文地址:https://www.cnblogs.com/audi-car/p/4639061.html
Copyright © 2011-2022 走看看