题目
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为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));
}
}
标签:arr,奇数,int,ArrayUtil,偶数,数组
From: https://blog.csdn.net/zhourongxiang1/article/details/144326339