题目
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,要求速度越快越好,需要的额外空间越小越好。
解
static void paixu(int[] arr,int n){
if(n==0||n==1){
return;
}
int i=0;
int j=n-1;
int temp;
while(i<j){
if(arr[i]%2==1){
i++;
continue;
}
if(arr[j]%2==0){
j--;
continue;
}
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
i++;
j--;
}
}
优化算法(利用位运算)
奇数与1进行位运算是1,偶数与1进行位运算是0
public void paixu(int[] nums){
int len=nums.length;
if(len<2){
return;
}
int i=0;
int j=len-1;
int temp=0;
while(i<j){
if((i&1)==1){
i++;
continue;
}
if((j&1)==0){
j--;
continue;
}
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
i++;
j--;
}
}