【C语言习题】29.调整奇数偶数顺序


作业标题

调整奇数偶数顺序

作业内容

调整数组使奇数全部都位于偶数前面。

题目:

输入一个整数数组,实现一个函数,

来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,

所有偶数位于数组的后半部分。

2.解题思路

3.具体代码

void Movenum(int a[], int sz)
{
	int* left = a;
	int* right = a + sz - 1;

	while (left < right)
	{
		while (((left < right) && (*left) % 2 != 0))// 从 left 指针开始,向右移动,直到找到一个偶数
		{
			left++;// 移动到下一个元素
		}
		while (((left < right) && (*right) % 2 == 0))// 从 right 指针开始,向左移动,直到找到一个奇数
		{
			right--;// 移动到前一个元素
		}
		if (left < right)//交换left和right指针所指向的元素。
		{//这一步就相当于把第一个奇数和偶数换位置,奇数放前面,偶数放后面。
			int tmp = *left;
			*left = *right;
			*right = tmp;
		}
	}
}

int main()
{
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
	scanf("%d", &a);
	int i = 0;
	int sz = (sizeof(a) / sizeof(a[0]));
	Movenum(a, sz);
	for (i = 0; i < sz; i++)
	{
		printf("%d ", a[i]);
	}
	system("pause");     // 在 Windows 系统上,system("pause") 用于暂停程序直到用户按下任意键
	return 0;
}

打印:

在这里插入图片描述

代码讲解:

  1. 进入main函数,先定义一个数组来存放元素。

  2. 通过输入改变数组内元素。

  3. 定义整型变量i,定义整型变量sz来存放数组a的元素个数。

  4. Movenum(a, sz);将数组a首元素地址和数组a的元素个数传递给了Movenum函数。

  5. 进入Movenum函数,初始化两个指针 leftrightleft 指向数组的开始,而 right 指向数组的最后一个元素。

  6. 使用两个嵌套的 while 循环来移动元素。外层循环确保 left 指针始终在 right 指针的左侧。

  7. 内层循环分别处理 leftright 指针。

    第一个内层循环将 left 指针向右移动,直到它指向一个偶数或者与 right 指针相遇。

    第二个内层循环将 right 指针向左移动,直到它指向一个奇数或者与 left 指针相遇。

  8. 如果 left 指针在 right 指针的左侧,交换 leftright 指针所指向的元素。

    这一步就相当于把第一个奇数和偶数换位置,奇数放前面,偶数放后面。

  9. 返回主函数,打印a数组元素。

  10. system("pause");在 Windows 系统上,system(“pause”) 用于暂停程序直到用户按下任意键。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值