1.题目描述
调整数组顺序使奇数位于偶数前面:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
2. 解题思路
可以定义两个指针,一个指针指向数组的第一个元素,一个指针指向数组的最后的一个元素,然后分别移动收尾指针,当首指针指向数组中第一个偶数,尾指针指针指向第一个奇数时,两位置上的元素进行交换,直到首尾指针相等时,说明遍历完成。如图:
3.程序代码
public class test1 {
/* 奇数在前 偶数在后*/
public static void Sort(int arr[]){
int len = arr.length;
int i,j;
int temp;
for(i=0,j=len-1;i!=j;){
if(arr[i]%2==0){
//前指针找到第一个偶数 后指针找到第一个偶数 则交换两位置上的元素
if(arr[j]%2!=0){
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}else{
j--;
}
}else{
i++;
}
}
}
public static void main(String[] args) {
int arr[] = {8,3,2,4,5,7,9,6,1};
Sort(arr);
for(int i:arr){
System.out.print(i+" ");
}
}
}