《剑指offer第二版》面试题21:调整数组顺序使奇数位于偶数前
2020-03-25 本文已影响0人
castlet
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的部分,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。
解题思路:
- 用两个指针start和end。
- start从数组的开头向后遍历,遇到第一个偶数数字停止。
- end从数组的最后往前遍历,遇到第一个奇数数数字停止。
- 交换start和end的数字。再继续遍历。
代码
void recorderOddEven(int[] data) {
if (data == null || data.length <= 0) {
return;
}
int start = 0;
int end = data.length - 1;
while (start < end) {
// 找出从start开始的一个偶数
while (start < end && (data[start] & 1) != 0) {
start ++;
}
// 找出从end开始的一个奇数
while (start < end && (data[end] & 1) == 0) {
end--;
}
// 交换
if (start < end) {
int tmp = data[start];
data[start] = data[end];
data[end] = tmp;
}
}
}