IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 将数组中的奇数放在偶数前面——C语言 -> 正文阅读

[C++知识库]将数组中的奇数放在偶数前面——C语言

目录

题目:

解法一:三个数组(不推荐)

? ? ? ? 思维:

????????代码:

解法二:遍历,从两面同时填补(推荐)

? ? ? ? 思维:

? ? ? ? 代码:

解法三:双下标同时搜索(不推荐)

? ? ? ? 思维:

? ? ? ? 代码:

总结:


题目:

? ? ? ? 给你一个充满了随机数的数组,想办法将其中的奇数放在偶数前面。

像这样:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main ()
{
	srand((unsigned int)time(NULL));
	int arr[100]={0};
	int i=0;
	int sz=sizeof(arr)/4;
	for(i=0;i<sz;i++)
	{
		arr[i]=rand()%1000+1;
	}
}

解法一:三个数组(不推荐

? ? ? ? 思维:

????????找出所有奇数放在数组1,找出所以偶数放在数组2,将两个数组合并即可,缺点是占空间大,更主要的是麻烦,因此不推荐。

????????代码:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main ()
{
	srand((unsigned int)time(NULL));
	int arr[100]={0};
	int i=0;
	int sz=sizeof(arr)/4;
	for(i=0;i<sz;i++)
	{
		arr[i]=rand()%1000+1;
	}
	int arr1[100]={0};
	int arr2[100]={0};
	int x1=0;
	int x2=0;
	for(i=0;i<sz;i++)
	{
		if(arr[i]%2!=0)
		{
			arr1[x1]=arr[i];
			x1++;
		}
		else if(arr[i]%2==0)
		{
			arr2[x2]=arr[i];
			x2++;
		}
	}
	if(x1==sz-1||x2==sz-1)//考虑极端情况
	{
		//无需排序 
	}
	else
{
	int count=x1+1;//计算有多少个奇数 
	int arr3[100]={0};
	for(i=0;i<count;i++)
	{
		arr[i]=arr1[i];
	}
	int j=0;
	for(;i<sz;i++)
	{
		arr[i]=arr2[j];
		j++;
	}
}
	
	for(i=0;i<sz;i++)
	{
		printf("%d ",arr[i]);
	}
}

解法二:遍历,从两面同时填补(推荐

? ? ? ? 思维:

? ? ? ? 创建一个数组arr,然后开始遍历题目给出的数组,若是奇数就从arr前面开始填补,若是偶数就从arr后面开始填补;

由于这种解法容易思考,容易实现,并且涵盖了极端情况,虽然空间占用劣于第三种,但根据摩尔定律,空间已经不再重要了,所以我个人认为这种写法优于其他两种。因此推荐。

? ? ? ? 代码:

	int haha[100]={0};
	int j=0;
	int k=sz-1;
	for(i=0;i<sz;i++)
	{
		if(arr[i]%2!=0)
		{
			haha[j]=arr[i];
		}
		else
		{
			haha[k]=arr[i];
		}
	}

解法三:双下标同时搜索(不推荐

? ? ? ? 思维:

? ? ? ? 两个下标,从原数组两端搜索,满足左边对应偶数,右边对应奇数,则交换,没什么好说的。缺点是极端情况没有被涵盖,如果没有专门去思考极端情况能否成立,很容易漏掉,因此不太推荐。

? ? ? ? 代码:

	int left=0;
	int right=sz-1;
	while(left<right)
	{
		while(arr[left]%2!=0&&left<right)//极端情况 
		{
			left++;
		}
		while(arr[right]%2==0&&left<right)//极端情况 
		{
			right--;
		}
		if(left<right)
		{
			int tmp=arr[left];
			arr[left]=arr[right];
			arr[right]=tmp;
		}
	}

总结:

? ? ? ? 方法不一定是时间最短,空间最小的才是最好的方法,最合适当下情况,能解决当下问题的方法,才是最好的方法。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 10:47:31  更:2022-12-25 10:48:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 2:26:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码