注:题目来源于 Java资讯库 ,代码通过网上搜集整理而来
public static void main(String[] args) {
OddBeforeEven obe = new OddBeforeEven();
int[] arr = {1, 2, 3, 4, 5, 6, 12, 7, 8, 9, 10};
int[] data = obe.recorderOddEven(arr, arr.length);
System.out.println(Arrays.toString(data));
// int[] data = obe.oddBeforeEven(arr, arr.length);
// System.out.println(Arrays.toString(data));
}
// 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
// 使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
private static int[] recorderOddEven(int[] data) {
if(data == null || data.length <= 0){
return null;
}
int i = 0;
int j = data.length -1;
while (i < j){
while(!isEven(data[i]) && i < j){
i++;
}
while (isEven(data[j]) && i < j){
j --;
}
if(i < j){
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
return data;
}
// 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
// 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,
// 并保证奇数和奇数,偶数和偶数之间的相对位置不变。
private static int[] oddBeforeEven(int[] data){
if(data == null || data.length <= 0){
return null;
}
int begin = 0;
int end = 0;
int dalt = 1;
while(end < data.length){
while(begin < data.length && !isEven(data[begin])){
begin ++;
}
end = begin + dalt;
while(end < data.length && isEven(data[end])){
end ++;
}
if(end < data.length ) {
int tmp = data[end];
for (int i = end; i > begin; i--) {
data[i] = data[i - 1];
}
data[begin] = tmp;
dalt = (++end) - (++begin);
}
}
return data;
}
// 判断是否是一个偶数
private static boolean isEven(int n) {
if((n & 0x1) == 0){
return true;
}
return false;
}
网友评论