问题描述:
代码如下:利用快排的划分的思路进行解决即可(双指针双向扫描)
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Sixth {
//调整数组顺序使奇数位于偶数前面,要求时间复杂度未O(n)
//采用快排的思想进行处理
public static int[] solve(int[] a){
int st=0;//左边扫奇数
int end=a.length-1;//右边扫偶数
boolean flag=false;
boolean flag1=false;
while (st<=end){
if ((a[st]&1)==1)st++;
else flag=true;
if ((a[end]&1)==0)end--;
else flag1=true;
if (flag1&&flag){
int temp=a[st];
a[st]=a[end];
a[end]=temp;
flag=false;
flag1=false;
}
}
return a;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入数组的长度");
int len=scanner.nextInt();
int[] a=new int[len];
for (int i = 0; i <len ; i++) {
a[i]=new Random().nextInt(20);
}
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(solve(a)));
}
}
运行结果如下: