14. 调整数组顺序是奇数位于偶数前(C++版本)

本文介绍了一种在数组中对元素进行排序的方法,特别关注于将奇数元素放置在偶数元素之前。此外,还提供了一个可扩展的框架,允许用户通过自定义函数来指定排序规则,例如根据能否被3整除来排列元素。

常规方法:

void ReorderArray(int pData[] ,unsigned int size)
{
	if (nullptr == pData || 0 == size) return;

	int begin = 0;
	int end = size - 1;

	while (begin < end)// 注意&操作的优先级小于&&, 所对对于运算pData[begin] & 0x01加上括号(pData[begin] & 0x01)
	{
		while (begin < end && (pData[begin] & 0x01) != 0) ++begin; // 从左往右查找偶数
		while (begin < end && (pData[end] & 0x01) == 0) --end; // 从右往左查找奇数
		if (begin != end) std::swap(pData[begin], pData[end]);
	}
}

可扩展方法:
想要基数位于偶数前,调用ReorderArrayByFunction时传入IsOdd。
如果需要将不能被3整除的放在前面,能够3整除的放在后面,调用ReorderArrayByFunction时传入CanDivideBy3。

bool IsOdd(int curData)
{ 	
	return 0 == (curData & 0x01); // &操作加上括号
}

bool CanDivideBy3(int curData)
{
	return 0 == (curData % 3); // &操作加上括号
}
void ReorderArrayByFunction(int* pData, unsigned int size, bool(*pFunc)(int))
{
	if (nullptr == pData || 0 == size) return;Re

	int begin = 0;
	int end = size - 1;

	while (begin < end)
	{
		while (begin < end && (!pFunc(pData[begin]))) ++begin;
		while (begin < end && pFunc(pData[end])) --end;
		if (begin != end) std::swap(pData[begin], pData[end]);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值