带你刷 · 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;
  • 开始用leftright分别遍历数组,各司其职

在这里插入图片描述

对应代码:
        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;
}

在这里插入图片描述

相关文章
|
消息中间件 物联网 网络性能优化
MQTT常见问题之mqtt 连接一直显示 Not authorized to connect如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
数据采集 供应链 搜索推荐
数据集成:融合不同来源的数据
【6月更文挑战第4天】数据集成在企业中发挥关键作用,连接数据孤岛,促进信息流动,提升决策能力。通过抽取、清洗、转换和加载(ETL)不同来源、格式的数据,整合到统一框架,进行深度分析。以零售商为例,集成销售、客户和供应链数据可优化库存管理。数据清洗确保质量,转换满足分析需求,最终加载到数据仓库。Python和pandas库是实现这一过程的工具之一。随着技术进步,数据集成将推动企业向智能化和个性化发展。
430 2
|
传感器 数据采集 监控
基于阿里云MQTT服务,设计一个STM32的智能光伏控制系统
这篇文章详细介绍了利用STM32F103C8T6单片机实现光伏发电系统的关键技术。全文分为四章:第一章阐述了光伏发电的背景、意义及应用场景,强调其在绿色能源领域的重要性。第二章介绍了如何通过STM32F103C8T6及光敏电阻和伺服电机实现光线追踪系统,详细描述了硬件选择、连接及使用HAL库编写的单片机程序。第三章讲解了最大功率点追踪(MPPT)的原理,并展示了如何利用STM32F103C8T6和相关传感器、DC-DC转换器实现MPPT功能。第四章描述了如何通过STM32F103C8T6与SIM7600CE 4G模块连接到阿里云MQTT服务,实现设备状态数据的远程传输和控制。本文提供了全面的硬
18216 5
解决win11开启移动热点共享手机连上后无法上网的问题
本文提供了解决Windows 11开启移动热点后手机无法上网问题的步骤:通过控制面板进入网络和共享中心,在以太网属性中勾选“允许其他网络用户通过此计算机的Internet连接来连接”,然后手机重新连接共享热点即可上网。
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第13天】本文将深入浅出地介绍卷积神经网络(CNN)的基本原理,并探讨其在图像识别领域的应用。通过实例演示如何利用Python和TensorFlow框架实现一个简单的CNN模型,我们将一步步从理论到实践,揭示CNN如何改变现代图像处理技术的面貌。无论你是深度学习新手还是希望深化理解,这篇文章都将为你提供价值。
|
JavaScript 前端开发 API
vue使用element plus组件上传服务器
vue使用element plus组件上传服务器
409 1
|
关系型数据库 MySQL Shell
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
730 0
|
关系型数据库 MySQL 数据库
提取日期信息:解析MySQL中的DATE()函数
在数据库管理中,从日期时间值中提取日期部分是非常常见的操作,而DATE()函数正是用于帮助我们实现这一目标的工具。
709 0
|
JavaScript 小程序
VUE3(三十五)vite构建的项目配置使用.env文件
VUE3(三十五)vite构建的项目配置使用.env文件如标题所示:我要在vue3项目使用.env文件。 先介绍一下项目背景,项目使用VUE3.2 + vite2.9 + typescript搭建。 我基本断定,vue3使用.env文件的方法可能和vue2使用.env文件的方法可能是不同,关于vue2项目如何使用.env文件,请移步《VUE2(七)VUE配置env文件使用》
750 1
|
存储 网络安全 开发工具
Git的GUI图形化工具&ssh协议&IDEA集成Git
Git的GUI图形化工具&ssh协议&IDEA集成Git
421 0