Bootstrap

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


前言

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


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<right)
	{
		while ((left<right) && (a[left] % 2 == 1))
		{
			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;
}

结果见下图:

在这里插入图片描述


总结

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

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

;