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

题目要求:
调整数组使奇数全部都位于偶数前面。

题目:

输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。

分析:
要使一组整形数组中所有奇数位于数组的前半部分,则要使数组前面的偶数与数组后面的偶数互换位置。
则首先要找到数组前面的第一个偶数,代码实现如下:

while((*start&1) == 1)
		{
			start++;
		}

也要找到字母从后到前的第一个奇数,代码实现如下:

while((*end&1) == 0)
		{
			end--;
		}

找到这两个数然后将这两个数互换位置,代码实现如下:

if(start<end)
		{
			int tmp = *start;
			*start = *end;
			*end = tmp;
			start++;
			end--;
		}

然后以上这三个代码应该是一个循环,代码实现如下:

while(start<end)
	{
		//判断第一个数是否为奇数,如果为奇数则不动,start+1;
		while((*start&1) == 1)
		{
			start++;
		}
		//判断最后一个数是否为偶数,如果为偶数则不动,end-1;
		while((*end&1) == 0)
		{
			end--;
		}
		//如果start<end时,则交换两个数。
		if(start<end)
		{
			int tmp = *start;
			*start = *end;
			*end = tmp;
			start++;
			end--;
		}
	}

全部代码实现如下:

#define _CRT_SECURE_NO_WARNINGS    1
#include <stdio.h>
#include <stdlib.h>

//打印数组;
void print(int* arr, int len)
{
	int i = 0;
	for(i=0; i<len; i++)
	{
		printf("%d ",arr[i]);
	}
	putchar('\n');
}
void reverse(int* arr, int len)
{
	int* start = arr;
	int* end = arr+len-1;
	while(start<end)
	{
		//判断第一个数是否为奇数,如果为奇数则不动,start+1;
		while((*start&1) == 1)
		{
			start++;
		}
		//判断最后一个数是否为偶数,如果为偶数则不动,end-1;
		while((*end&1) == 0)
		{
			end--;
		}
		//如果start<end时,则交换两个数。
		if(start<end)
		{
			int tmp = *start;
			*start = *end;
			*end = tmp;
			start++;
			end--;
		}
	}
}
int main()
{
	int arr[] = {1, 2, 3, 5, 6, 7, 8, 9};
	//计算整形数组的长度;
	int len = sizeof(arr)/sizeof(arr[0]);
	//打印原始数组;
	print(arr, len);
	reverse(arr, len);
	//打印转换后的数组;
	print(arr, len);

	system("pause");
	return 0;

}

展示结果如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值