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

73

被折叠的 条评论
为什么被折叠?



