剑指offer------数组------将奇数放在前面偶数放在后面

题目

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路

用两个指针,一个从前遍历一个从后遍历,若前面的是奇数则pBegin++,若后面是偶数pend++,若前面的是偶数且后面的是奇数,则交换。

第一步:拆分数组      第二步:遍历交换

代码:

void Reorder(int *pData,unsigned int length,bool(*func)(int))
{
	if(pData==NULL || length==0)
		return ;
	
	int *pBegin=pData;
	int *pEnd=pData+length-1;
	
	while(pBegin<pEnd)
	{
		while(pBegin<pEnd&&!func(*pBegin))
			pBegin++;
		while(pBegin<pEnd&&func(*pEnd))
			pEnd--;
			
		if(pBegin<pEnd)
		{
			int temp=*pBegin;
			*pBegin=*pEnd;
			*pEnd=temp;
		}
	}
}

bool isEven(int n)
{
	return (n&1)==0;
}

void ReorderOddEven(int *pData,unsigned int length)
{
	Reorder(pData,length,isEven);
}

猜你喜欢

转载自blog.csdn.net/qq_39503189/article/details/82316911