《剣指offer》面接問題21:奇数が偶数の前になるように配列順を調整する(C++実現)

826 ワード

タイトル
整数配列を入力し、すべての奇数が配列の前半に位置し、すべての偶数が配列の後半に位置するように、配列内の数値の順序を調整する関数を実現します.
コード#コード#
#pragma once

//   :        ,                  ,    
//            ,             。

/** 
 *                   
 *          
 *               ,     
 */

void reOrder(int* pData, int length, bool (*func)(int))
{
	if (pData == nullptr || 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, int length)
{
	reOrder(pData, length, isEven);
}