题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
拿到题目一下就联想到了快速排序,改一下快排的判断条件就行了。
大致思路就是从前往后找偶数,从后往前找奇数,交换。
public class OddFirst {
public static void main(String[] args) {
System.out.print("请输入数组大小:");
Scanner scanner=new Scanner(System.in);
int nums=scanner.nextInt();
int[] arr=new int[nums];
for(int i=0;i<nums;i++) {
arr[i]=scanner.nextInt();
}
for(int i=0;i<arr.length;i++) { //输出原数组
System.out.print(arr[i]+" ");
}
System.out.println(" ");
oddFirst(arr);
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
public static void oddFirst(int[] arr) {
int low=0;
int high=arr.length-1;
int pivot=arr[0];
while(low<high) {
while(low<high&&arr[high]%2==0)high--;//从后往前找奇数
arr[low]=arr[high];
while(low<high&&arr[low]%2!=0)low++;//从前往后找偶数
arr[high]=arr[low];
}
arr[low]=pivot;
}
}
测试结果:
请输入数组大小:9
1
2
3
4
5
6
7
8
9
1 2 3 4 5 6 7 8 9
9 7 3 5 1 6 4 8 2