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

题目:

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

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

算法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.hqwc.cn/news/697057.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS常用滤镜效果

CSS 提供了多种滤镜效果&#xff0c;可以通过 filter 属性应用于 HTML 元素。以下是一些常用的 CSS 滤镜效果&#xff1a; 一、灰度 (Grayscale) 将图像转换为灰度图像。值在 0%&#xff08;原始图像&#xff09;和 100%&#xff08;完全灰度&#xff09;之间。 filter: gra…

springmvc核心流程

核心流程及配置 核心流程 执行流程 用户发送请求到DispatcherServlet前端控制器&#xff0c;前端控制器收到请求后自己不进行处理&#xff0c;而是委托给其他的解析器进行处理&#xff0c;作为统一访问点&#xff0c;进行全局的流程控制 DispatcherServlet调用HandlerMapping映…

图生视频,Stable Diffusion WebUI Forge内置SVD了!

在 Stable Diffusion WebUI Forge 版本中内置了一个SVD插件&#xff0c;也就是 Stable Video Diffusion&#xff08;稳定视频扩散&#xff09;&#xff0c;之前我介绍过这个工具的使用方法&#xff1a;图片生成视频&#xff08;独立部署SVD) 但是当时还不能集成到Stable Diffu…

Docker运行出现iptables: No chain/target/match by that name报错如何解决?

在尝试重启 Docker 容器时遇到的错误信息表明有关 iptables 的配置出了问题。这通常是因为 Docker 需要配置网络&#xff0c;而 iptables 规则没有正确设置或被意外删除。具体到你的错误信息中&#xff0c;报错 iptables: No chain/target/match by that name 表示 Docker 尝试…

嵌入式人工智能是一个怎样的概念呢?

嵌入式人工智能将会是未来几年人工智能发展的主要方向之一&#xff0c;并且会伴随着一系列的职位和角色的出现。虽然目前还没有嵌入式人工智能的确切定义&#xff0c;但随着人工智能的不断发展&#xff0c;它势必会延伸到边缘、终端和嵌入式市场。 嵌入式人工智能具有速度快、功…

vivado Kintex UltraScale+ 配置存储器器件

Kintex UltraScale 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Kintex UltraScale 器件执行擦除、空白检查、编程和验证等配置操作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 &#xff0c; 并支持通过 Vivado 软件对其中所列非易失性存…

深入浅出:ConcurrentLinkedQueue源码分析与实战

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

文本分类的深度注意图扩散网络 笔记

1 Title Deep Attention Diffusion Graph Neural Networks for Text Classification&#xff08;Yonghao Liu、Renchu Guan、Fausto Giunchiglia、Yanchun Liang、Xiaoyue Feng&#xff09;【EMnlp 2021】 2 Conclusion Text classification is a fundamental task with broad…

基于SpringBoot + MySQL的宠物医院管理系统设计与实现+毕业论文+指导搭建视频

系统介绍 项目的使用者可以避免排队挂号&#xff0c;比较方便&#xff0c;也方便于宠物医院的管理。现在的宠物本系统根据华阳社区宠物医院管理工作流程将系统使用者划分为三类&#xff0c;分别为、宠物医生、宠物主人以及系统管理人员&#xff0c;以下是对该三类类用户的具体…

大模型微调方法汇总

微调方法 Freeze方法P-tuning方法 prefix-tuningPrompt TuningP-tuning v1P-tuning v2Lora方法 重要相关参数LoRA 的优势Qlora方法 相关参数微调经验 模型选择模型大小选择数据处理微调方案英文模型需要做词表扩充吗&#xff1f;如何避免灾难遗忘大模型的幻觉问题微调后的输出…

人脸消费给传统食堂带来的变化

消费的技术基础是脸部识别&#xff0c;脸部识别是基于人的容貌特征信息进行认证的生物特征识别技术&#xff0c;其突出的特征是以非接触方式进行识别&#xff0c;避免个人信息的泄露。 面部识别和指纹识别、掌纹识别、视网膜识别、骨骼识别、心率识别等都是人体生物特征识别技术…

408数据结构-哈夫曼树 自学知识点整理

前置知识&#xff1a;二叉树的概念、性质与存储结构 哈夫曼树 哈夫曼树的定义 首先需要明确几个概念。 路径&#xff1a;从树中的一个结点到另一个结点之间的分支构成这两个结点之间的路径。 路径长度&#xff1a;路径上的分支数目称为路径长度。 权(值)&#xff1a;树中结点…