题意:输入一个数组,要求使数组中的奇数部分排列在数组的前半段,偶数数组排列在数组的后半段
解题思路为数组内创建前后两个指针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; }