【剑指offer】【C语言】调整数组中奇偶数顺序_冒泡法+二分法_调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分

news2024/11/24 6:30:07

题目:

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:{4,6,5,7,2,3,1}
输出:{5,7,3,1,4,6,2}

1.冒泡法:

冒泡法的逻辑是前后两个元素对比,如果前一个是偶数,后一个是奇数,就前后交换,这样进行 元素个数-1趟排查

代码实现:

#include<stdio.h>
void _swap(int* arr, int sz)
{
	int i = 0,j=0;
	int flag = 0;
	for (i = 0;i < sz-1;i++)
	{
		flag = 0;
		for (j = 0;j < sz - 1 - i;j++)//排好的后面的偶数就不用动了
		{
			if (arr[j] % 2 == 0 && arr[j + 1] % 2 != 0)
			{
				int tem = 0;
				tem = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tem;
				flag = 1;
			}
		}
		if (flag == 0)//要是一趟中一个没换,就说明已经排好了
				break;

	}
}
void _printf(int* arr, int sz)
{
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		printf("%d ", arr[i]);
	}
}
int main()
{
	int arr[] = { 1,2,4,5,7,6,8 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	_swap(arr, sz);
	_printf(arr, sz);
}

这里引入了flag变量,为了判断是否在某一趟时数组元素已经排好,排好就跳出,节省了后面步骤

2.二分法:

逻辑:从前后两边分别开始遍历:
左边遍历到偶数停下来,是奇数继续往后走
右边遍历到奇数停下来,是偶数继续往前走

#include<stdio.h>
#include<assert.h>
int* _swap(int* arr, int sz)
{
	int left = 0;
	int right = sz - 1;
	int* ret = arr;
	assert(arr != NULL);
	while (left < right)
	{
		while ((left < right) && arr[left] % 2 == 1)
			left++;
		while ((left < right) && arr[right] % 2 == 0)
			right--;
		if (left < right)//当前面两个while是因为不满足left<right
		//跳出来时,就不能交换了
		{
			int tem = 0;
			tem = arr[left];
			arr[left] = arr[right];
			arr[right] = tem;

		}
	}
	return ret;
}
void _printf(int* arr, int sz)
{
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		printf("%d ", arr[i]);
	}
}
int main()
{
	int arr[]= { 1,5,4,7,9,8,3,2,6 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	_swap(arr, sz);
	_printf(arr, sz);
	return 0;
}

在这里插入图片描述

细节:
在这里插入图片描述

1.没到中间,说明还有没遍历的元素,进循环
2.&&3. 同理,只要left和right中间还有元素,就进循环,继续遍历
4. 如果 2. 和 3.的循环是因为left>=right而跳出的话,这里的条件就会限制交换,不让它俩交换,如果没有这个条件限制,就换错了

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

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

相关文章

2023.8 - java - Number类和Math类

一般地&#xff0c;当需要使用数字的时候&#xff0c;我们通常使用内置数据类型&#xff0c;如&#xff1a;byte、int、long、double 等。 然而&#xff0c;在实际开发过程中&#xff0c;我们经常会遇到需要使用对象&#xff0c;而不是内置数据类型的情形。为了解决这个问题&a…

时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化

时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SVMD分解算法&#xff0c;分解结果可视化&#xff0c;MATLAB程序&#xff…

【微服务学习笔记】认识微服务

【微服务学习笔记】认识微服务 单体架构 分布式架构 微服务架构 SpringCloud 服务拆分和注意事项 服务拆分的案例demo 各个服务之间的数据库都是相互独立的&#xff0c;你不能直接访问对方的数据库&#xff0c;只能从一个服务像另外一个服务发起远程调用 在订单模块的服务中 …

【面试经典150题】移除元素·JavaScript版

题目来源 大致思路&#xff1a;遍历数组&#xff0c;如果遇到值为val的元素&#xff0c;使用数组最后一个元素替换它。详细过程&#xff1a; /*** param {number[]} nums* param {number} val* return {number}*/ var removeElement function(nums, val) {let i0,nnums.leng…

【数据库】表操作 习题总结

目录 关系建表 数据库sql的执行顺序 内外连接的写法 1.设计一张商品表 2.设计一张老师表 3.设计一张图书表 4.查询练习 5.查询练习 6.设计一个考勤系统 7.设计一个学校宿舍管理系统 8.设计一个车辆违章系统 9.设计一个学校食堂管理系统 10.有一张员工表emp&#xf…

Redis三种持久化方式详解

一、Redis持久性 Redis如何将数据写入磁盘 持久性是指将数据写入持久存储&#xff0c;如固态磁盘&#xff08;SSD&#xff09;。Redis提供了一系列持久性选项。其中包括&#xff1a; RDB&#xff08;快照&#xff09;&#xff1a;RDB持久性以指定的时间间隔执行数据集的时间点…

wazuh初探系列二 :Wazuh功能初步探知

目录 介绍 主动响应&#xff1a; 监控日志 "bin"目录用途&#xff1a; 告警信息&#xff1a; etc 目录中包含了以下主要的配置文件&#xff1a; ruleset&#xff1a;自带规则库&#xff0c;建议不改 rules目录: 解码器&#xff1a; 登录日志格式&#xff1a…

使用kubeadm方式快速部署一个K8S集群

目录 一、环境准备 二、环境初始化 三、在所有主机上安装相关软件 1、安装docker 2、配置k8s的yum源 3、安装kubelet、kubeadm、kubectl 四、部署Kubernetes Master 五、加入Kubernets Node 六、部署CNI网络插件 七、测试k8s集群 一、环境准备 我的是CentOS7系统&am…

C++Qt堆叠窗体的使用案例

本博文源于笔者最近学习的Qt&#xff0c;内容讲解堆叠窗体QStackedWidget案例&#xff0c;效果是选择左侧列表框中不同的选项时&#xff0c;右侧显示所选的不同的窗体。 案例效果 案例书写过程 控件都是动态创建的&#xff0c;因此.h文件需要创建控件&#xff0c;.cpp书写业务…

Android NDK JNI与Java的相互调用

一、Jni调用Java代码 jni可以调用java中的方法和java中的成员变量,因此JNIEnv定义了一系列的方法来帮助我们调用java的方法和成员变量。 以上就是jni调用java类的大部分方法,如果是静态的成员变量和静态方法,可以使用***GetStaticMethodID、CallStaticObjectMethod等***。就…

[SpringBoot3]Web服务

五、Web服务 基于浏览器的B/S结构应用十分流行。SpringBoot非常适合Web应用开发&#xff0c;可以使用嵌入式Tomcat、Jetty、Undertow或Netty创建一个自包含的HTTP服务器。一个SpringBoot的Web应用能够自己独立运行&#xff0c;不依赖需要安装的Tomcat、Jetty等。SpringBoot可以…

如何在Windows、Mac和Linux操作系统上安装Protocol Buffers(protobuf)编译器

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

TLSv1.2抓包解密分析过程之RSA_WITH_AES_128_CBC_SHA

RSA_WITH_AES_128_CBC_SHA是TLSv1.2中最简单的加密协议了&#xff0c;非常适合用于学习TLSv1.2的握手过程。 RSA_WITH_AES_128_CBC_SHA表示 使用RSA非对称加密进行密钥协商使用AES128 CBC模式加密Hash算法使用SHA-1 参考文档&#xff1a;rfc5246 rfc5077 rfc7627 1. t…

Kyligence Copilot 登陆海外,斩获 Product Hunt 日榜 TOP 2

8月14日&#xff0c;AI 数智助理 Kyligence Copilot 在全球知名科技产品平台 Product Hunt 上线&#xff0c;其以出色的产品创新实力&#xff0c;在激烈的竞争中脱颖而出&#xff0c;仅仅在 24 小时内收获了超过 400 个投票和近 200 条支持评论&#xff0c;荣登当日产品榜排名第…

Microsoft正在将Python引入Excel

Excel和Python这两个世界正在碰撞&#xff0c;这要归功于Microsoft的新集成&#xff0c;以促进数据分析和可视化 Microsoft正在将流行的编程语言Python引入Excel。该功能的公共预览版现已推出&#xff0c;允许Excel用户操作和分析来自Python的数据。 “您可以使用 Python 绘图…

远程端口转发 实践 如何将物理机某一端口的服务转发到vps上,使得外网能访问到

以本机1470端口&#xff08;我的sqli-labs&#xff09;与vps的9023端口为例。 SSH基本的连接命令是&#xff1a; ssh usernamehostname这里牵扯到了两台主机&#xff0c;一是执行命令、运行SSH客户端的主机&#xff0c;我们称为本地主机A【Host A】&#xff1b;二是接收连接请…

记录某一次演讲

大家好&#xff0c;我是繁依&#xff0c;是一名软件工程的学生。很高兴能站在这里&#xff0c;与大家分享一下自己日常数据分析学习的经验。首先&#xff0c;我先来介绍一下自己常用的学习资源和工具&#xff0c;学习平台及资源有哔哩哔哩、掘金小册、和鲸社区、飞桨社区等 常…

ECharts配合Node.js爬虫实现数据可视化

数据可视化简介 可视化技术是将数据和信息以图形化的方式展示出来&#xff0c;以便更好地理解和分析。可视化技术通常使用各种图表、图形、动画和交互式效果来呈现数据。可视化技术有以下几个基本概念&#xff1a; 数据&#xff1a;可视化技术的基础是数据。数据可以是数字、文…

使用Kind搭建本地k8s集群环境

目录 1.前提条件 2.安装Kind 3.使用Kind创建一个K8s集群 3.1.创建一个双节点集群&#xff08;一个Master节点&#xff0c;一个Worker节点&#xff09; 3.2.验证一下新创建的集群信息 3.3.删除刚刚新建的集群 4.安装集群客户端 4.1.安装kubectl 4.1.1.验证kubectl 4.2.安…

工法到底是什么?

关于工法许多人都是感到陌生的&#xff0c;第一次接触会想&#xff0c;工法是建筑工法还是农业工法呢&#xff1f;其实都不是的。百度百科给的解释是&#xff1a;工法一词来自日本&#xff0c;日本《国语大辞典》将工法释为工艺方法和工程方法。在中国&#xff0c;工法是指以工…