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

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

相关文章

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表