Lenguaje C: ajusta el orden de los números pares e impares

Tema: Ingrese una matriz de enteros e implemente una función para ajustar el orden de los números en la matriz de modo que todos los números impares en la matriz se ubiquen en la primera mitad de la matriz y todos los números pares se ubiquen en la segunda mitad de la matriz. la matriz

Código:

Idea 1: Recorra la matriz, encuentre todos los números pares y todos los números impares respectivamente, y luego cópielos en la matriz original

void move_arr(int arr[], int sz)
{
	int arr1[20] = { 0 };
	int i = 0;
	int j = 0;
	//找出所有奇数
	for (i = 0; i < sz; i++)
	{
		if (arr[i] % 2 != 0)
		{
			arr1[j] = arr[i];
			j++;
		}
	}
	//找出所有偶数,此时j的值是最后一个奇数的下标
	for (i = 0; i < sz; i++)
	{
		if (arr[i] % 2 == 0)
		{
			arr1[j] = arr[i];
			j++;
		}
	}
	//拷贝到原数组
	for (i = 0; i < sz; i++)
	{
		arr[i] = arr1[i];
	}
}

Idea 2: use subíndices de matriz, a la izquierda para encontrar números pares de adelante hacia atrás, a la derecha para encontrar números impares de atrás hacia adelante e intercambie después de encontrar

void move_arr(int arr[], int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left < right)
	{
		//当数组内只有偶数或只有奇数时,判断条件加上 left < right 防止越界
		//找偶数
		while ((left < right) && arr[left] % 2 != 0)
			left++;
		//找奇数
		while ((left < right) && arr[right] % 2 == 0)
			right--;
		//交换
		if (left < right)
		{
			int tmp = arr[left];
			arr[left] = arr[right];
			arr[right] = tmp;
		}
	}
}

Idea 3: configure dos punteros, el puntero izquierdo encuentra números pares de adelante hacia atrás, el puntero derecho encuentra números impares de atrás hacia adelante e intercambie después de encontrar

void move_arr(int* str, int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left < right)
	{
		//找偶数
		while (*(str + left) % 2 != 0)
			left++;
		//找奇数
		while (*(str + right) % 2 == 0)
			right--;
		if (left < right)
		{
			int tmp = *(str + left);
			*(str + left) = *(str + right);
			*(str + right) = tmp;
		}
	}
}

función principal

int main() 
{
	int arr[10] = { 0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//输入
	for (int i = 0; i < sz; i++)
	{
		scanf("%d", &arr[i]);
	}
	//调整
	move_arr(arr, sz);
	//输出
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/minLi_/article/details/129850869
Recomendado
Clasificación