《剑指offer第二版》面试题21:调整数组顺序使奇数位于偶数前

2020-03-25  本文已影响0人  castlet

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的部分,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。

解题思路:

  1. 用两个指针start和end。
  2. start从数组的开头向后遍历,遇到第一个偶数数字停止。
  3. end从数组的最后往前遍历,遇到第一个奇数数数字停止。
  4. 交换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;
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读