数组内奇偶数分离(奇数在前)
- 数组:[1, 2, 3, 4, 5, 6, 7, 8, 9]
- 结果:[1, 3, 5, 7, 9,...]
思路1:
private static void sort(int[] val) {
int len = val.length;
//表示偶数的下标
int a = 0;
//从下标为1处开始遍历,遍历到奇数时,与a交换
int b = 1;
for (; b < len ; b++) {
//当前位置数为奇数,不需要交换,继续寻找偶数。(a++)
if (val[a] % 2 != 0){
a++;
}
if (val[b] %2 != 0){
int temp = val[a];
val[a] = val[b];
val[b] = temp;
//继续寻找下一个偶数
a++;
}
}
System.out.println(Arrays.toString(val));
}
- 聪明的你会发现上边的结果,并没有实现对偶数进行排序。
思路2:
从结果入手,我们想要的结果数组:[1, 3, 5, 7, 9, 2, 4, 6, 8]
可以先遍历一次数组,确定奇数的个数。在遍历一次数组确定此数为奇数还是偶数,填充到另一个新数组中,实现排序。前提是数组有序。
public static void sort2(int[] args) {
int len = args.length;
int b = 0 ;
//确定奇数个数
for (int i = 0; i < len; i++) {
if (args[i] % 2 != 0){
b++;
}
}
//此时,b为我们想要的结果数组中偶数的开始下标。
Arrays.sort(args);
int[] result = new int[len];
int a= 0;
for (int i = 0; i < len; i++) {
if (args[i] % 2 ==0 ){
//偶数
result[b] = args[i];
b++;
}else {
//奇数
result[a] = args[i];
a++;
}
}
System.out.println(Arrays.toString(result));
}
网友评论