华为招聘机试整理14:数组奇数偶数排序「建议收藏」

华为招聘机试整理14:数组奇数偶数排序

大家好,又见面了,我是全栈君。

华为招聘机试整理14:数组奇数偶数排序

题目:数组奇数偶数排序
对一个数组。将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。

题目分析:
本题主要就是考查整型数组之间的排序
算法思路:
①先循环推断每一个数的奇数偶数。分别放入奇数数组中,偶数数组中
②用sort将奇数数组和偶数数组排序
③比較奇数数组和偶数数组个数的大小关系
④依据题目要求组织存放数据

==========================================================================
參考代码:

//数组奇数偶数排序.cpp
//2014.7.11 hepanhui
#include <iostream>
#include <algorithm>
const int maxn = 100;
using namespace std;

bool compare(const int a, const int b)
{
    return a > b;
}

void Sorted(int a[], int n)
{
    int odd[maxn];
    int even[maxn];
    int k = 0, j = 0, m1 = 0;
    int cnt1 = 0,cnt2 = 0;
    for(int i = 0; i < n; i++)
    {
        if(a[i]%2)
        {
            odd[k++] = a[i];
            cnt1++;
        }
        else
        {
            even[j++] = a[i];
            cnt2++;
        }
    }
    odd[k++] = '\0';
    even[j++] = '\0';

    sort(odd, odd + cnt1);
    sort(even, even + cnt2, compare);

    if(cnt1 >= cnt2)
    {
        for(int m = 0; m < cnt2; m++)
        {
            a[m + m1] = odd[m];
            a[m + m1 + 1] = even[m];
            m1 = m1 + 1;
        }
        for(int i = 0; i < cnt1 - cnt2; i++)
        {
            a[2*cnt2 + i] = odd[i+cnt2];
        }
    }
    else
    {
        for(int m = 0; m < cnt1; m++)
        {
            a[m + m1] = odd[m];
            a[m + m1 + 1] = even[m];
            m1 = m1 + 1;
        }
        for(int i = 0; i < cnt2 - cnt1; i++)
        {
            a[2*cnt1 + i] = even[i+cnt1];
        }
    }
    a[n+1] = '\0';
}

int main()
{
    int a[10] = {2, 3, 14, 6, 2, 15, 12, 14, 4, 11};
    Sorted(a,10);
    for(int i = 0; i<10-1; i++)
        cout << a[i] << " ";
    cout << a[10-1] << endl;
    return 0;
}

调试中易犯的错误:
①不要忘记odd[k++] = ‘\0’ even[j++] = ‘\0’
②这里须要注意组织整理存放数据的时候。一定要区分于《华为招聘机试整理7:给定一个数组input[]》这道题目,m1这里是加1。这里特别easy犯错,由于我们m每次循环的时候都加了1
③不要忘记a[n+1] = ‘\0’切记不能写成a[n] = ‘\0’
③对于整型数组主函数的时候。一定要注意个数n须要标识,假设嫌麻烦,我们直接给详细数字④对于这里也能够採用申请动态内存空间来保存奇数数组和偶数数组
int *odd = (int *)malloc(sizeof(int) * n);
int
even = (int *)malloc(sizeof(int) * n);


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116487.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php基础设计模式(注册树模式、工厂模式、单列模式)

    php基础设计模式(注册树模式、工厂模式、单列模式)

    2021年11月6日
    41
  • 解决SqlTransaction用尽的问题

    解决SqlTransaction用尽的问题解决SqlTransaction用尽的问题有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。我做的一个项目,是负责一个厂的考勤的。厂里有员工1000多号人。按每人每天打4次卡,一个月30天,则产生的考勤记录数目为1000*4*30=120,000条。在处理这些记录时,我采用的办法是先生成SQL语句,然后执行这些SQL语句:Sql…

    2022年5月4日
    57
  • Oracle sql调优(网络优化知识点)

    文章目录一、访问数据的方法1、直接访问数据1.1全表扫描1.2ROWID扫描2、访问索引2.1索引唯一扫描2.2索引范围扫描2.3索引全扫描2.4索引快速全扫描2.5索引跳跃式扫描拓展补充本博客介绍一下属于oracle优化器范畴的一些基础知识,访问数据的方法,分为直接访问数据的方法和访问索引的方法两种,然后有了这些基础知识后,可以参考学习我的另外一篇博客:Oracle优化器简介,对…

    2022年4月13日
    44
  • windows端口转发工具_android 端口转发

    windows端口转发工具_android 端口转发比如我们在host2机器上面部署了很多服务,但是由于某种原因导致我们无法直接ssh访问该服务器已经其上服务的对应端口,但是host3服务器,既能够访问host2服务器,又可以访问我们的host1服务器。这时,我们就可以通过设置ssh来进行服务的访问。但是还有两个问题:你需要保持终端开启防止SSH进程被关闭;由于网络故障/波动导致SSH终断时无法自动重连。前者可以使用tmux等第三方工具来解决,后者需要supervisor等第三方监控工具,不过我们还有一个更常用的选…

    2025年5月23日
    4
  • windows的host文件的位置和作用建议收藏

    在Window系统中有个Hosts文件(没有后缀名),在Windows98系统下该文件在Windows目录,在Windows2000/XP系统中位于C:\Winnt\System32\Drivers\

    2021年12月20日
    76
  • Java商城源码最好用的java商城电商系统之一

    Java商城源码最好用的java商城电商系统之一为符合新互联网+时代产品线即时起更新演示网址:2021单店版:http://mall.javaemall.com/index.htm2021多店版:http://www.javaemall.com/index.htm源码包含:PC版网站+手机触屏站+APP客户端(安卓+苹果)+微信版(小程序+公众号)几套区别:2021版升级了移动端新功能和UI页面,更符合扁平简约化潮流,新增微信小程序,底层技术框架升级。多店版就是多店铺多商户,多用户B2B2C功能,能入驻开店。单店版是自营B…

    2022年7月8日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号