【寒假每日一题】DAY.5 调整奇数偶数顺序

news2024/11/19 22:42:23
题目内容:
调整数组使奇数全部都位于偶数前面。

题目:

输入一个整数数组,实现一个函数,

来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,

所有偶数位于数组的后半部分。

思路:

第一步:给定两个下标left和right,left放在数组的起始位置,right放在数组中最后一个元素的位置。

第二步:如上图,让left从前往后找,找到一个偶数后停止【循环】

第三步:接下来让right从后往前找,找到一个奇数后停止【循环】

第四步:让left和right分别找到相应的数据进行交换,再让left++,right--,进行下一个元素的判断

第五步:上步骤只交换了一对,还要再从第二步开始进行,所以这又是一个【循环】

接下来有什么细节在写代码过程中提。

首先我们先把基本框架搭好

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
int main()
{
	int arr[10] = { 0 };//数组初始化
	int size = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	//输入数组每一个元素
	for (int i = 0; i < size; i++)
	{
		scanf("%d", &arr[i]);
	}
	
	printf("\n");
}

第一步:给定两个下标left和right,left放在数组的起始位置,right放在数组中最后一个元素的位置。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Swap(int* left, int* right)
{
	
}
int main()
{
	int arr[10] = { 0 };//数组初始化
	int size = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	//输入数组每一个元素
	for (int i = 0; i < size; i++)
	{
		scanf("%d", &arr[i]);
	}

	//封装函数Swap
	Swap(arr, arr + size - 1);
	
	
}

arr是首元素地址,指向1,也就是左下标left,arr + size - 1指向10,就是右下标,然后数组传参分别用指针接收 

第二步:让left从前往后找,找到一个偶数后停止【循环】

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Swap(int* left, int* right)
{
	//因为偶数要在后
		//left先找偶数
		while (*left % 2 != 0)
		{
			left++;
		}
}
int main()
{
	int arr[10] = { 0 };//数组初始化
	int size = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	//输入数组每一个元素
	for (int i = 0; i < size; i++)
	{
		scanf("%d", &arr[i]);
	}

	//封装函数Swap
	Swap(arr, arr + size - 1);
	
	
}

第三步:接下来让right从后往前找,找到一个奇数后停止【循环】

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Swap(int* left, int* right)
{
	    //因为偶数要在后
		//left先找偶数
		while (*left % 2 != 0)
		{
			left++;
		}

        //找奇数
        while (*right % 2 == 0)
		{
			right--;
		}
}
int main()
{
	int arr[10] = { 0 };//数组初始化
	int size = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	//输入数组每一个元素
	for (int i = 0; i < size; i++)
	{
		scanf("%d", &arr[i]);
	}

	//封装函数Swap
	Swap(arr, arr + size - 1);
	
	
}

第四步:让left和right分别找到相应的数据进行交换,但这里需要有个条件left必须要小于right

如上图,因为,当right指向5,left指向6时已经没有必要交换了,奇数已经在前,偶数在后 

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Swap(int* left, int* right)
{
	    //因为偶数要在后
		//left先找偶数
		while (*left % 2 != 0)
		{
			left++;
		}

        //找奇数
        while (*right % 2 == 0)
		{
			right--;
		}

        //交换
		if(left < right)
        {
            int tmp = *left;
		    *left = *right;
		    *right = tmp;
		    left++;
		    right--;
        }
}
int main()
{
	int arr[10] = { 0 };//数组初始化
	int size = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	//输入数组每一个元素
	for (int i = 0; i < size; i++)
	{
		scanf("%d", &arr[i]);
	}

	//封装函数Swap
	Swap(arr, arr + size - 1);
	
	
}

第五步:因为只交换了一对,接下来又要重复二、三、四、五步骤,所以这又是个循环,当left < right说明中间还有元素可以被交换

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Swap(int* left, int* right)
{
    while(left < right)
    {
        //因为偶数要在后
		//left先找偶数
		while (*left % 2 != 0)
		{
			left++;
		}

        //找奇数
        while (*right % 2 == 0)
		{
			right--;
		}

        if(left < right)
        {
            //交换
		    int tmp = *left;
		    *left = *right;
		    *right = tmp;
		    left++;
		    right--;
        }
    }
}
int main()
{
	int arr[10] = { 0 };//数组初始化
	int size = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	//输入数组每一个元素
	for (int i = 0; i < size; i++)
	{
		scanf("%d", &arr[i]);
	}

	//封装函数Swap
	Swap(arr, arr + size - 1);
	
	
}

最后在主函数输出该数组即可

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Swap(int* left, int* right)
{
    while(left < right)
    {
        //因为偶数要在后
		//left先找偶数
		while (*left % 2 != 0)
		{
			left++;
		}

        //找奇数
        while (*right % 2 == 0)
		{
			right--;
		}

        if (left < right)
        {
           //交换
		    int tmp = *left;
		    *left = *right;
		    *right = tmp;
		    left++;
		    right--;
        }
    }
}
int main()
{
	int arr[10] = { 0 };//数组初始化
	int size = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	//输入数组每一个元素
	for (int i = 0; i < size; i++)
	{
		scanf("%d", &arr[i]);
	}

	//封装函数Swap
	Swap(arr, arr + size - 1);
    
    //输出交换后的数组
	for (int i = 0; i < size; i++)
	{
		printf("%d ", arr[i]);
	}
}

【代码实现】

但是还有一个问题,假设输入的元素全是奇数【1、3、5、7、9、11、13、15、17、19、21】,在第二步找偶数可能会遇到问题,它会越界,所以还要加上left < right 这个条件,当数组全是偶数也是如此

#include <stdio.h>
void Swap(int* left, int* right)
{
	while (left < right)
	{
		//因为偶数要在后
		//left先找偶数
		while (left < right && *left % 2 != 0)
		{
			left++;
		}

		//right找奇数
		while (left < right && *right % 2 == 0)
		{
			right--;
		}

		if (left < right)
		{
			//交换
			int tmp = *left;
			*left = *right;
			*right = tmp;
			left++;
			right--;
		}
	}
}
int main()
{
	int arr[10] = { 0 };//数组初始化
	int size = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	//输入数组每一个元素
	for (int i = 0; i < size; i++)
	{
		scanf("%d", &arr[i]);
	}

	//封装函数Swap
	Swap(arr, arr + size - 1);


	//输出交换后的数组
	for (int i = 0; i < size; i++)
	{
		printf("%d ", arr[i]);
	}
	
	printf("\n");
}

 程序运行结果

 奇数多偶数少

全是奇数

 

 2023年1月13日

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java并发编程] 线程八锁问题

文章目录1.共享会出现什么问题2. 什么是临界区3. synchronized解决方案4 线程八锁1.共享会出现什么问题 首先&#xff0c;我们先了解对某一资源共享会出现什么问题&#xff0c;然后怎么解决这个问题。 两个线程对初始值为 0 的静态变量一个做自增&#xff0c;一个做自减&…

STM32单片机CAN总线汽车自动会车灯远近光切换

实践制作DIY- GC0121-汽车自动会车灯 一、功能说明&#xff1a; 基于51单片机设计-汽车自动会车灯 功能介绍&#xff1a; OLED主控板&#xff1a;STM32F103C系列最小系统OLED显示3个按键&#xff08;开关、自动/手动、近光/远光&#xff09;CAN通讯模块 光敏LED板&#xff1a…

房产管理系统架构分析

数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b;通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。…

你的示波器只能抓到5%的波形?

采样时间、死区时间和捕获时间 数字示波器捕获信号的过程是典型的“采集-处理-采集-处理”&#xff0c;如图1所示为数字示波器的采集原理&#xff0c;一个捕获周期由采样时间和处理时间&#xff08;死区时间&#xff09;组成&#xff0c;如图2所示。 图1 示波器采集原理图 采…

Redis String 命令与实战

在前面的文章中&#xff0c;我们了解了 Redis 的基本功能&#xff0c;通过源码方式安装了 Redis&#xff0c;并搭建了 Redis 的源码运行环境。接下来将进入 “Redis 的实战应用篇”&#xff0c;在这部分我们将重点介绍 Redis 核心命令的使用&#xff0c;主要包括 Redis 中 Stri…

磨金石教育摄影技能干货分享|摄影师镜头下生活的色彩

在生活中也有很多亮丽的色彩&#xff0c;生活在我们看起来是平凡的&#xff0c;但其实每个地方每个人都会有不同的风景。不同的文化&#xff0c;不同的地域&#xff0c;这些都足以构造出不同的色彩。下面就让我们跟随镜头看看世界各地人民多姿多彩的生活。1 生活的色彩这是西孟…

ASP .Net Core内置 Identity 简介 使用

一、简介 1、概况 ASP.NET Core Identity是一个成员身份系统&#xff0c;可将用户注册和登录功能添加到 ASP.NET Core Web UI。 成员身份系统处理身份验证和授权问题。 身份验证涉及你的身份。 授权涉及允许你进行的操作。 因此&#xff0c;身份验证是授权的先决条件。 ASP .N…

js判断 数组中是否存在形同元素

上例子 flag true; //假设不重复&#xff1b; let arr [{ settingName: 渠道客户订单, settingCode: A1 },{ settingName: 户订单, settingCode: A1 },];for(let i 0;i < arr.length-1;i){ //循环开始元素 for(let j i 1;j < arr.length;j){ //循环后续所有元素 …

Pandoc 多Markdown转单PDF

文章目录Pandoc 简介Pandoc 安装pandoc-latex-template字体安装Powershell 脚本Ubuntu PandocMarkdown 合并Pandoc 简介 Pandoc, 免费的文档转换器, 支持常见的各种文件格式的相互转换, 如Markdown, HTML, EPUB, LaTeX, docx, RTF, PDF 等. 本篇以Windows下的多Markdown转单P…

个性化脑机接口及应用

脑机接口&#xff08;BCI&#xff09;是一种变革传统人机交互的新型技术&#xff0c;用户的大脑是直接的控制信号源。在BCI转化为实际应用时&#xff0c;由于用户个体之间的感觉、知觉、表象与认知思维活动、脑结构与功能具有一定的差异&#xff0c;通用BCI难以满足不同个体的需…

国产linux操作系统——麒麟操作系统的来龙去脉(有下载地址,亲测可用)

文章目录1、linux操作系统2、国产操作系统3、麒麟操作系统4、引用1、linux操作系统 目前市场主流的linux操作系统分类大致如此&#xff0c;国产操作系统的麒麟操作系统&#xff0c;底层比较杂&#xff0c;所以单独一类。 2、国产操作系统 排名日期截止到2022.6。 这里提一下排…

基于java SSM的房屋租赁系统设计和实现

基于java SSM的房屋租赁系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文…

ASO优化的两个渠道之推广+老用户维系

要想自己的APP在应用商城里获得较高的排名&#xff0c;提高用户的下载量&#xff0c;就要通过ASO优化来辅助完成。 &#xff08;一&#xff09;&#xff0c;ASO优化的排名因素——元数据的优化&#xff1a;1&#xff0c;icon图标。图片要直观和清晰地突出APP的内容&#xff0c…

力扣刷题记录——434. 字符串中的单词数、448. 找到所有数组中消失的数字、455. 分发饼干

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《434. 字符串中的单词数、448. 找到所有数组中消失的数字…

Google colab-思腾云

文章目录Google colab具体操作过程问题1问题2AutoDL问题1 无卡开机思腾云使用基础信息如何租用服务器&#xff1f;如何上传代码以及运行程序&#xff1f;操作服务器的方式&#xff1f;pycharm方式Xshell的形式问题1 libSM.so.6 和 libXrender.so.1问题2&#xff1a;运行代码出现…

Dubbo概述-快速入门

Dubbo概念 ●Dubbo是阿里巴巴公司开源的一个高性能、轻量级的Java RPC框架。 ●致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 ●官网: http://ubbo.apache.orgo 节点角色说明: . ●Provider: 暴露服务的服务提供方 ●Contahier: 服务运行容器 ●Co…

YOLOv3论文精读: An Incremental Improvement-增量式的改进

Abstract 我们对 YOLO 进行了一系列更新&#xff01;它包含一堆小设计&#xff0c;可以使系统的性能得到更新。我们也训练了一个新的、比较大的神经网络。虽然比上一版更大一些&#xff0c;但是精度也提高了。不用担心&#xff0c;它的速度依然很快。YOLOv3 在 320320 输入图像…

【Django项目开发】部门管理模块的开发(九)

文章目录一、模型类设计二、视图设计1.都有哪些接口三、序列化器类设计四.分页操作1.utils工具中定义pagination.py2.视图类中使用五.路由配置一、模型类设计 一个部门下面可能会有很多子部门&#xff0c;一个子部门上面可能会有父部门&#xff1b;即部门内部之间进行关联&…

Grapecity DataViewsJS JavaScript Crack

Grapecity DataViewsJS一个完整的 React 数据展示和数据网格平台 通过从各种不同的演示视图中进行选择&#xff0c;包括树、卡片、砖石、网格、时间线、甘特图、日历和网格&#xff0c;超越传统的表格显示。采集 by Ω578867473 免费无限开发者许可&#xff01;只为部署付费 快…

Hexo博客搭建(简化版)

Hexo博客搭建&#xff08;简化版&#xff09; 一、环境搭建 1.1 Git Git官网-下载界面 > git --version1.2 Node.js 1.2.1 下载安装Node.js Node.js官网下载界面 > node --version1.2.2 Hexo与Node.js Hexo versionMinimum (Node.js version)Less than (Node.js …