// 面试题21:调整数组顺序使奇数位于偶数前面
// 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有
// 奇数位于数组的前半部分,所有偶数位于数组的后半部分。
// ====================方法一====================
static void odd_even_1(std::vector<int>& arr)
{
if(arr.size()<2)
{
return;
}
uint32_t left = 0;
uint32_t right = arr.size() - 1;
auto temp = arr[left];
while(left < right)
{
while(left < right && (arr[right] & 0x1) == 0)
{
right--;
}
arr[left] = arr[right];
while(left < right && (arr[left] & 0x1) != 0)
{
left++;
}
arr[right] = arr[left];
}
arr[left]=temp;
}
// ====================方法二====================
static void odd_even_1_ex(std::vector<int>& arr)
{
_odd_even_1_ex(arr, _is_even);
}
static void _odd_even_1_ex(std::vector<int>& arr, bool (*func)(int))
{
if(arr.size()<2)
{
return;
}
uint32_t left = 0;
uint32_t right = arr.size() - 1;
auto temp = arr[left];
while(left < right)
{
while(left < right && func(arr[right]))
{
right--;
}
arr[left] = arr[right];
while(left < right && !func(arr[right]))
{
left++;
}
arr[right] = arr[left];
}
arr[left]=temp;
}
static bool _is_even(int n)
{
return (n & 1) == 0;
}