带你刷 · C语言 | 调整奇数偶数顺序

简介: 问:调整数组使奇数全部都位于偶数前面

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....

题目

问:调整数组使奇数全部都位于偶数前面

输入描述:
输入一个整数数组

输出描述:
所有偶数位于数组的后半部分


解法

1. 确定思路

  • 首先确定要调整的东西是奇数和偶数,两个东西,那么就采用双指针遍历数组
  • 数组的左端和右端各放置这两个指针
  • 左边的指针遇到偶数就停下;右边的指针遇到奇数就停下
  • 当两个指针都停下时,刚好是左边偶数右边奇数,就可以交换位置了

2. 编写代码

  • 按照上述思路,我们假设一个数组
对应代码:
int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int sz = sizeof(arr) / sizeof(arr[0]);
  • 然后关门,放指针!

在这里插入图片描述

对应代码:
    int* left = arr;
    int* right = arr + sz - 1;
  • 开始用left和right分别遍历数组,各司其职

在这里插入图片描述

对应代码:
        if (*left % 2 == 0 && *right % 2 == 1)
        {
            int tmp = *left;
            *left = *right;
            *right = tmp;
            left++;
            right--;
        }
  • 交换之后,left++,right--,继续判断要不要停

在这里插入图片描述

对应代码:
        if (*left % 2 == 1)
            left++;
        if (*right % 2 == 0)
            right--;
  • 循环终止条件的设计:当left不小于right的时候说明遍历完毕,退出循环
对应代码:
    while (left < right)
    {
        if (*left % 2 == 0 && *right % 2 == 1)
        {
            int tmp = *left;
            *left = *right;
            *right = tmp;
            left++;
            right--;
        }
        if (*left % 2 == 1)
            left++;
        if (*right % 2 == 0)
            right--;
    }
  • 咱们看看最终结果:

在这里插入图片描述

  • 成功解决问题!
附上完整代码:
#include<stdio.h>
//调整奇数偶数问题
int main()
{
    int arr[] = { 6,4,2,1,8,7,3,9,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    int left = 0;
    int right = sz - 1;
    while (left < right)
    {
        if (arr[left] % 2 == 0 && arr[right] % 2 == 1)
        {
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
            left++;
            right--;
        }
        if (arr[left] % 2 == 1)
            left++;
        if (arr[right] % 2 == 0)
            right--;
    }
    for (int i = 0; i < sz - 1; i++)
        printf("%d", arr[i]);

    return 0;
}

在这里插入图片描述

相关文章
|
XML 应用服务中间件 Apache
Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的。
Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的。
|
机器学习/深度学习 存储 移动开发
Chunked-Prefills 分块预填充机制详解
为解决传统静态或迭代调度中存在的资源浪费与延迟问题,Sarathi-Serve 提出了 chunked-prefills 和 stall-free scheduling 机制,通过将长 prompt 拆分为多个小块,并与 decode 请求混合调度,从而实现高吞吐与低延迟的平衡。
3784 2
Chunked-Prefills 分块预填充机制详解
|
自然语言处理 数据可视化 数据挖掘
带你飞上云端,轻松解析数据——gopup库详细解析--包含安装库教程
本文介绍了Python库gopup,它是一个用于轻松爬取互联网数据的工具,简化了数据收集和处理的过程。文章提供了gopup的安装教程,特别强调了安装时需注意setuptools版本,并给出了PyCharm和命令行两种安装方法。gopup库能获取包括指数、百度和谷歌数据等多种类型的数据。文中还展示了如何使用gopup获取微博指数和豆瓣新片榜数据,并通过代码示例呈现数据和图表。此外,文章提醒了使用时的风险和部分接口的失效情况,并提供了库文档链接以供深入学习。gopup库适用于数据可视化和数据分析,是进行文本挖掘和自然语言处理项目的理想工具。
1092 0
带你飞上云端,轻松解析数据——gopup库详细解析--包含安装库教程
|
6月前
|
传感器 人工智能 运维
AgentRAG实战:经验库问答让AI像老员工一样精准
AgentRAG是向量空间AI实验室推出的智能问答新范式,融合ReAct Agent、知识库与Skill,突破传统RAG“一问一答”局限。它具备意图识别、任务规划与经验库精准触发能力,尤其擅长将企业隐性经验转化为可复用的标准化流程,已在JBoltAI平台高效落地。(239字)
314 0
|
10月前
|
存储 人工智能 数据挖掘
MCP应用场景示例
MCP赋能智能数据分析与办公自动化:分析师输入需求,AI即连多源数据生成报告;办公助手通过MCP获取会议记录、整理并邮件分发,实现高效协同。
|
边缘计算 安全 网络协议
计算机网络
计算机网络是数字时代的隐形脉络,从ARPANET到万物互联,重塑社会、经济与文明。它打破时空边界,推动信息革命,也带来安全与伦理挑战。作为现代文明的基石,其未来在于速度与智能,更在于如何以人为本,构建开放、安全、包容的连接世界。
|
关系型数据库 MySQL Linux
CentOS系统安装phpStudy的详细步骤和注意事项
一、安装流程 执行官方安装脚本 通过以下命令直接安装官方集成环境(支持CentOS 7及以上版本): ``` yum install -y wget && wget -O install.sh https://www.hsbang.com/ install.sh && sh install.sh ``` 安装过程包含自动下载组件和配置环境,需等待2-5分钟。
727 4
|
机器学习/深度学习 人工智能 算法
【AI系统】模型压缩基本介绍
模型压缩旨在通过减少存储空间、降低计算量和提高计算效率,降低模型部署成本,同时保持模型性能。主要技术包括模型量化、参数剪枝、知识蒸馏和低秩分解,广泛应用于移动设备、物联网、在线服务系统、大模型及自动驾驶等领域。
985 4
【AI系统】模型压缩基本介绍
|
存储 JavaScript 前端开发
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
647 1
|
Oracle Java 关系型数据库
jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?
本文提供了详细的JDK 17安装教程,包括下载、安装、配置环境变量的步骤,并解释了在已有其他版本JDK的情况下如何管理多个JDK环境。
31855 0