输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
public class Solution {
//改进的冒泡算法
public void reOrderArray1(int[] array) {
if (array.length > 1) {
for (int i = 0; i < array.length -1; i++) {
boolean flag=false;
for (int j = 0; j < array.length - 1 - i; j++) {
if ((array[j] & 1) == 0 && (array[j + 1] & 1) != 0) {
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=true;
}
}
if(!flag){
break;
}
}
}
}
/*
*
* */
public void reOrderArray2(int[] array) {
if(array==null||array.length==0)
return;
int i=0,j;
while(i<array.length){
while(i<array.length&&(array[i]&1)!=0){
i++;
}
//此时第i个位置是偶数
j=i+1;
while(j<array.length&&(array[j]&1)==0){
j++;
}
if(j<array.length){
//此时第j个位置是奇数
int jishu=array[j];
for(int j2=j-1;j2>=i;j2--){
array[j2+1]=array[j2];
}
array[i++]=jishu;
}else{
break;
}
}
}
//空间换时间,时间复杂度n
public void reOrderArray(int[] array) {
int oddCount=0;
for(int i=0;i<array.length;i++){
if((array[i]&1)==1)
oddCount++;
}
int[] array2=new int[array.length];
int oddIndex=0,ouIndex=oddCount;
for(int i=0;i<array.length;i++){
if((array[i]&1)==1)
array2[oddIndex++]=array[i];
else
array2[ouIndex++]=array[i];
}
for(int i=0;i<array.length;i++){
array[i]=array2[i];
}
}
}
本文介绍了一种在保持奇数和偶数内部顺序不变的情况下,将数组中的所有奇数移到前面,所有偶数移到后面的算法实现。提供了三种不同的方法:改进的冒泡排序、双指针技术和使用额外空间优化时间复杂度。
1040

被折叠的 条评论
为什么被折叠?



