题意:输入一个数组,要求使数组中的奇数部分排列在数组的前半段,偶数数组排列在数组的后半段
解题思路为数组内创建前后两个指针left和right,出现四种情况时指针进行移动
- arr[left]为奇数,arr[right]为偶数时 left++;right--;
- arr[left]为奇数,arr[right]为奇数时 left++;
- arr[left]为偶数,arr[right]为偶数时 right--;
- arr[left]为偶数,arr[right]为奇数时 指针对应值互换;
代码如下:
public static void ReorderArray(int[] arr)
{ //左边奇数 右边偶数
if (arr == null)
return;
int i = 0;
int j = arr.Length - 1;
while (i < j)
{
if (isEven(arr[i]) && !isEven(arr[j]))
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
else if (!isEven(arr[i]) && isEven(arr[j]))
{
i++;
}
else if (isEven(arr[i]) && isEven(arr[j]))
{
j--;
}
else
{
i++;
j--;
}
}
}
public static Boolean isEven(int n)
{
return (n & 1) == 0;
}