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

2024-05-14 02:44

本文主要是介绍面试题:调整数字顺序,使奇数位于偶数前面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

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

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

算法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中的数据重新复制到arrfor (i = 0; i < len; i++)arr[i] = brr[i];//位置不同ij,位置相同都ifree(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.chinasem.cn/article/987532

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不