【剑指Offer 14】调整数组顺序使奇数位于偶数前面
2017-07-08 本文已影响21人
3e1094b2ef7b
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
代码如下:
package demo;
public class Test13 {
public static void recordOddEven(int[] arr) {
if(arr == null || arr.length < 2) {
return;
}
// 从左到右记录偶数的位置
int start = 0;
// 从右到左记录奇数的位置
int end = arr.length - 1;
while(start < end) {
// 找偶数
while(start < end && (arr[start] % 2 != 0)) {
start++;
}
// 找奇数
while(start < end && arr[end] % 2 == 0) {
end--;
}
/*
* 找到后就将奇数和偶数交换位置
* (对于start==end的情况,交换不会有影响。)
*/
int tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
}
}
/**
* 打印数组元素
* @param arr
*/
public static void printArray(int[] arr) {
if(arr == null || arr.length <= 0) {
return;
}
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
}
public static void main(String[] args) {
System.out.println("数组中偶数、奇数交替出现");
int[] arr1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
recordOddEven(arr1);
printArray(arr1);
System.out.println("数组中所有偶数都在奇数前面:");
int[] arr2 = {0, 2, 4, 6, 1, 3, 5, 7};
recordOddEven(arr2);
printArray(arr2);
System.out.println("数组中所有奇数都在偶数前面:");
int[] arr3 = {1, 3, 5, 7, 0, 2, 4, 6};
recordOddEven(arr3);
printArray(arr3);
System.out.println("数组为NULL:");
int[] arr4 = null;
recordOddEven(arr4);
printArray(arr4);
System.out.println("数组中只有1个数字:");
int[] arr5 = {1};
recordOddEven(arr5);
printArray(arr5);
}
}
运行结果