栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言练习——调整数组内奇数偶数的顺序】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言练习——调整数组内奇数偶数的顺序】


调整奇数偶数顺序
  • 前言
  • 1、不改变元素顺序
  • 2、改变元素的顺序
  • 总结

前言

调整数组里的奇数偶数的顺序,使奇数全部都位于偶数前面。


1、不改变元素顺序
  • 首先将奇数都调整到数组的前面
  • 然后将偶数都调整到数组的后面
  • 所有的奇数部分的前后顺序不变
  • 所有的偶数部分的前后顺序不变

int main()
{
	int a[] = { 1,2,8,9,4,10,3,5,6,0,7 };
	int left = 0;
	int sz = sizeof(a) / sizeof(a[0]);
	int right = sz-1;
	int tmp = 0;//临时中间变量
	int num = sz;//判断次数
	while (num)
	{
		if (a[left] % 2 == 0)//此时a[left]是偶数,则进行移位
		{
			//ou = i;//下一次判断的起始位置
			tmp = a[left];
			for (int j = left; j <= right - 1; j++)
			{
				a[j] = a[j + 1];
			}
			a[right] = tmp; //偶数放在数组末尾
		}
		else
		{
			left++;//a[left]不是偶数,则判断下一个a[left+1]
		}
		num--;
	}
	for (int  i = 0; i < sz; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

结果见下图:


10

2、改变元素的顺序
  • 首先将奇数都调整到数组的前面
  • 然后将偶数都调整到数组的后面
  • 所有的奇数部分的前后顺序有改变
  • 所有的偶数部分的前后顺序有改变

void change(int a[], int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left
		while ((left
			left++;
		}
		while ((left < right) && (a[right] % 2 == 0))
		{
			right--;
		}
		if (left < right)
		{
			int tmp = a[left];
			a[left] = a[right];
			a[right] = tmp;
		}
	}
}
void print(int a[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", a[i]);
	}
}
int main()
{
	int a[] = { 1,2,8,9,4,10,3,5,6,0,7 };
	int sz = sizeof(a) / sizeof(a[0]);
	change(a, sz);
	print(a, sz);
	return 0;
}

结果见下图:


总结

还是需要多练习,不管自己写的代码是罗嗦了,还是太烂了,也必须要写完,实现题目要求,这是最重要的一步。

第二步就是多看看别人写的代码,学习别人的思路,记录下来写成博客,方便自己复习。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942308.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号