题目
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)
解法
双指针i和j
指针i起点是数组起点,当i检测到偶数时停下。j的起点时数组终点,当j检测到奇数时停下,交换i和j处的元素。
如图,2和9交换。
package com.company;import com.company.util.ArrayUtil;import java.util.Arrays;public class Test20 {public static void main(String[] args) {
// int[] arr={1, 2, 3 ,4 ,5,6,7,8,9,10};int[] arr = ArrayUtil.randomArray(0, 11, 10);int j=arr.length-1;for (int i=0;i<j;i++){if(arr[i]%2==0){while(j>i){if(arr[j]%2==1){ArrayUtil.swap(arr,i,j);break;}j--;}}}System.out.println(Arrays.toString(arr));}
}