面试题:调整数字顺序,使奇数位于偶数前面

news2024/12/26 20:57:36

题目:

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序

使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分

算法1:

利用快速排序的一次划分思想,从2端往中间遍历

时间复杂度:O(n),只遍历一次

空间复杂度:O(1),只在当前数组里面移动,找到就交换

#include <stdio.h>

void Move(int* arr, int len)
{
	int low = 0;//起始下标,左
	int high = len - 1;//结束下标,右
	while (low < high)//左右下标未相遇,数据还未处理完
	{
		while (low < high && (arr[low] % 2) != 0)//从前往后找偶数,奇数就跳过
		{
			low++;
		}//出来arr[low]==0,偶
		while (low < high && (arr[high] % 2) == 0)//从后往前找奇数,偶数就跳过
		{
			high--;
		}//出来arr[high]!=0,奇

		if (low < high)//奇偶数交换
		{
			int tmp = arr[low];
			arr[low] = arr[high];
			arr[high] = tmp;
		}

	}
}

//输出arr的所有数据
void Show(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("%d  ", arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	Move(arr, sizeof(arr) / sizeof(arr[0]));
	Show(arr, sizeof(arr) / sizeof(arr[0]));

	return 0;
}

算法2:

遍历数组,并把偶数移到数组的末尾

时间复杂度:O(n)

空间复杂度:O(1)

void Move(int* arr, int len)
{
	int tmp;//拿出的偶数暂存位置
	for (int i = 0; i < len - 1; i++)//最后一个数字不需要处理
		//是奇数则是处理后的最后一个奇数,是偶数则是处理后的第一个偶数
	{
		if ((arr[i] % 2) == 0)//是偶数
		{
			tmp = arr[i];//把当前偶数拿出来
			for (int j = i; j + 1 < len; j++)//后面所有数据前移一位
			{
				arr[j] = arr[j + 1];//从i+1开始,依次往前移动
			}
			arr[len - 1] = tmp;//当前偶数放到数组最后位置
		}
	}
}


//输出arr的所有数据
void Show(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("%d  ", arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	Move(arr, sizeof(arr) / sizeof(arr[0]));
	Show(arr, sizeof(arr) / sizeof(arr[0]));

	return 0;
}

算法3:(这个奇偶数的原顺序不变)

额外定义一个数组,存放数据(空间复杂度为O(n))

遍历原数组2遍(时间复杂度为O(n))

第一遍把所有的奇数复制到新数组

第二遍把所有的偶数复制到新数组

void Move(int* arr, int len)
{
	int* brr = (int*)malloc(len * sizeof(int));
	int i = 0;//arr下标
	int j = 0;//brr下标
	//把所有奇数放到brr前半部分
	for (i = 0; i < len; i++)
	{
		if ((arr[i] % 2) != 0)//奇数
			brr[j++] = arr[i];
	}
	//把所有偶数放到brr后半部分
	for (i = 0; i < len; i++)
	{
		if ((arr[i] % 2) == 0)//偶数
			brr[j++] = arr[i];
	}
	//把brr中的数据重新复制到arr
	for (i = 0; i < len; i++)
		arr[i] = brr[i];//位置不同ij,位置相同都i

	free(brr);

}


//输出arr的所有数据
void Show(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("%d  ", arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	Move(arr, sizeof(arr) / sizeof(arr[0]));
	Show(arr, sizeof(arr) / sizeof(arr[0]));

	return 0;
}

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

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

相关文章

【漏洞复现】泛微OA E-Cology ResourceServlet文件读取漏洞

漏洞描述&#xff1a; 泛微OA E-Cology是一款面向中大型组织的数字化办公产品&#xff0c;它基于全新的设计理念和管理思想&#xff0c;旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology ResourceServlet存在任意文件读取漏洞&#xff0c;允许未经授权的用户…

网络安全之OSPF进阶

该文针对OSPF进行一个全面的认识。建议了解OSPF的基础后进行本文的一个阅读能较好理解本文。 OSPF基础的内容请查看&#xff1a;网络安全之动态路由OSPF基础-CSDN博客 OSPF中更新方式中的触发更新30分钟的链路状态刷新。是因为其算法决定的&#xff0c;距离矢量型协议是边算边…

【java-数据结构14-双向链表的增删查改2】

上一篇文章中&#xff0c;我们已经对双向链表进行一些基本操作&#xff0c;本篇文章我们继续通过对链表的增删查改来加深对链表的理解~同时有任何不懂的地方可以在评论区留言讨论&#xff0c;也可以私信小编~觉得小编写的还可以的可以留个关注支持一下~话不多说正片开始~ 注意…

「JavaEE」多线程案例分析3:线程池

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 线程池 &#x1f349;简介&#x1f349;标准库中的线程池&#x1f349;Executors&#x1f349;实现一个简单的线程池 &#x1f349;简介…

初始Django

初始Django 一、Django的历史 ​ Django 是从真实世界的应用中成长起来的&#xff0c;它是由堪萨斯&#xff08;Kansas&#xff09;州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天&#xff0c;那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和…

识别AI论文生成内容,降低论文高AI率

AI写作工具能帮我们在短时间内高效生成一篇毕业论文、开通报告、文献综述、任务书、调研报告、期刊论文、课程论文等等&#xff0c;导致许多人开始使用AI写作工具作为撰写学术论文的辅助手段。而学术界为了杜绝此行为&#xff0c;开始使用AIGC检测系统来判断文章是由AI生成还是…

机器学习中的聚类

目录 认识聚类算法 聚类算法API的使用 聚类算法实现流程 聚类算法模型评估 认识聚类算法 聚类算法是一种无监督的机器学习算法。 它将一组数据分成若干个不同的群组&#xff0c;使得每个群组内部的数据点相似度高&#xff0c;而不同群组之间的数据点相似度低。常用的相似…

【3dmax笔记】028:倒角的使用方法

一、倒角描述 在3dmax中创建倒角效果可以通过多种方法实现,以下是几种常见的方法: 使用倒角修改器。首先创建一个图形(如矩形和圆),然后对齐它们,将它们转化为可编辑样条线,并附加在一起,选择要倒角的边缘,然后使用倒角修改器来调整高度、轮廓等参数。使用倒角剖面修…

Davinci工程vBaseEnv模块讲解

配合的模块 要正常使用vBaseEnv模块&#xff0c;要同时使能EcuC、OS、vBRS和vLinkGen模块。 OS是操作系统&#xff0c;除了FBL以外&#xff0c;其他都需要用到OS。 vBaseEnv是基础环境 vBRS是基本运行系统 vLinkGen脚本链接生成器 EcuC是ECU配置 EcuC配置 需要配合vBaseEnv模…

程序员的神奇应用:从代码创造到问题解决的魔法世界之持续集成/持续部署

文章目录 持续集成/持续部署 在软件开发的海洋中&#xff0c;程序员的实用神器如同航海中的指南针&#xff0c;帮助他们导航、加速开发、优化代码质量&#xff0c;并最终抵达成功的彼岸。这些工具覆盖了从代码编写、版本控制到测试和部署的各个环节。 在当今数字化的世界里&…

数字水印 | Arnold 变换的 Python 代码实现

&#x1f96d; 参考博客&#xff1a; Arnold 阿诺德置乱&#xff08;猫脸变换&#xff09;图像盲水印注入预处理&#xff08;Python&#xff09; 1 回顾&#xff1a;Arnold 公式 A r n o l d \mathsf{Arnold} Arnold 变换公式如下&#xff1a; [ x n 1 y n 1 ] [ 1 b a a b…

搜索引擎的设计与实现(二)

目录 3 搜索引擎的基本原理 3.1搜索引擎的基本组成及其功能 l.搜索器 (Crawler) 2.索引器(Indexer) 3.检索器(Searcher) 4.用户接口(UserInterface) 3.2搜索引擎的详细工作流程 4 系统分析与设计 4.1系统分析 4.2系统概要设计 4.2系统实现目标 前面内容请移步 搜索引…

力扣HOT100 - 70. 爬楼梯

解题思路&#xff1a; 动态规划 注意 if 判断和 for 循环 class Solution {public int climbStairs(int n) {if (n < 2) return n;int[] dp new int[n 1];dp[1] 1;dp[2] 2;for (int i 3; i < n; i) {dp[i] dp[i - 1] dp[i - 2];}return dp[n];} }

Co-Driver:基于 VLM 的自动驾驶助手,具有类人行为并能理解复杂的道路场景

24年5月来自俄罗斯莫斯科研究机构的论文“Co-driver: VLM-based Autonomous Driving Assistant with Human-like Behavior and Understanding for Complex Road Scenes”。 关于基于大语言模型的自动驾驶解决方案的最新研究&#xff0c;显示了规划和控制领域的前景。 然而&…

智能组网实施步骤?

随着信息技术的快速发展&#xff0c;智能组网正在逐渐成为各个行业的关注焦点。智能组网通过将各种设备、终端和系统连接起来&#xff0c;实现信息的传输和共享&#xff0c;从而提升工作效率和运营效益。本文将介绍智能组网的实施步骤&#xff0c;以及一家名为【天联】的智能组…

台式电脑屏幕亮度怎么调节?让你的眼睛更舒适!

在日常使用台式电脑时&#xff0c;调节屏幕亮度是一项常见的需求。不同的环境和个人偏好可能需要不同的亮度设置。因此&#xff0c;了解台式电脑屏幕亮度怎么调节是非常重要的。本文将介绍三种常见的方法&#xff0c;帮助您轻松调节台式电脑屏幕亮度&#xff0c;以满足您的需求…

【C++初阶】第十一站:list的介绍及使用

目录 list的介绍及使用 1.list的含义 2.list的介绍 3.list的使用 1.list的构造 2.list iterator的使用 3.list capacity 4.list element access 5 list modifiers 尾插尾删 和 头插头删 insert 和 erase resize swap clear 6.list sort and reverse 7.list copy vector copy li…

数字化转型:超越信息化,构建数字化营销体系!

在数字化的浪潮中&#xff0c;企业仅仅做好信息化数字能力基础已远远不够&#xff01;那么&#xff0c;还需要什么呢&#xff1f;没错&#xff0c;就是在数字化经营思维的指导下&#xff0c;建立起数字化营销体系和执行方案&#xff01;这是企业在数字时代中立于不败之地的关键…

在cmd中,如何使用cd进入指定文件目录

在cmd中&#xff0c;如何使用cd进入指定文件目录 1.要进入的磁盘与当前磁盘一致 例如: cd C:\Program Files (x86)\Google\Chrome\Application 2.进入到其他磁盘&#xff0c; 例如 cd /d D:\JAVA\codes\01\1.4 或者下面的方式&#xff08;直接输入磁盘F&#xff1a;和文件名…

11.php-fpm模板(监控页面取值)

php-fpm模板(监控页面取值) 开启监控页面配置 #修改php配置文件 vim /etc/php-fpm.d/www.conf pm.status_path /php_status#修改nginx配置文件,添加到nginx配置文件中 vim /etc/nginx/conf.d/default.conflocation /php_status {root html;fastcgi_pass 127.0.…