时间复杂度O(2N),空间复杂度O(N),包含返回数组。
int *reOrderArray( int *array, int arrayLen, int *returnSize ) {
int *returnAry = NULL, left = 0, right = 0;
returnSize[0] = 0;
if( array == NULL || arrayLen < 1 ) {
return NULL;
}
returnAry = (int *)malloc( arrayLen * sizeof(*returnAry) );
// 统计奇数的数量, 记为 count2.
// 这样做可以划分出存储偶数和存储奇数的下标范围,
// [0, count2 - 1]范围存储奇数, [count2, arrayLen - 1]范围存储偶数.
for( int i = 0; i < arrayLen; ++i ) {
right += (array[i] & 1) ? 1 : 0;
}
for( int i = 0; i < arrayLen; ++i ) {
returnAry[(array[i] & 1) ? (left++) : (right++)] = array[i];
}
returnSize[0] = arrayLen;
return returnAry;
}