【C语言】每日一题,快速提升(1)!

时间:2024-04-15 09:52:09

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

题目:

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

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

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

解题思路:

给定两个下标left和right,left放在数组的起始位置,right放在数组中最后一个元素的位置
循环进行一下操作
如果left和right表示的区间[left, right]有效,否则结束循环
left从前往后找,找到一个偶数后停止
right从后往前找,找到一个奇数后停止
如果left和right都找到了对应的数据,则交换

代码:

#include <stdio.h>

void my_rele(int* arr, int len)
{
	int* left = arr;
	int* right = arr + len - 1;
	while (left < right)
	{
		while (left < right && *left % 2 != 0)
		{
			left++;
		}
		while (left < right && *right % 2 == 0)
		{
			right--;
		}
		int ret = *left;
		*left = *right;
		*right = ret;
	}
	
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,1,0,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	my_rele(arr, sz);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", *(arr + i));
	}
	return 0;
}

结果;