面试题21:调整数组顺序使奇数位于偶数前面

2020-05-12  本文已影响0人  潘雪雯

题目

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

解题思路

定义两个指针start和end,分别指向数组的首元素和尾元素。
在两个指针相遇之前,判断这两个指针对应的数值是偶数还是奇数,若start对应的数值为偶数,且end对应的数值是奇数,则交换这两个数字。

代码

 int *end   = a + length - 1;
class Solution{
  public:
    void reorderOddEven_1(int *a,int length)
    {
        if(a == NULL || length == 0)
        {
            return;
        }
        int *start = a;
        int *end   = a + length - 1;
      
        while(start<end)
        {
            while(start < end && (*start & 0x1) != 0)
            {
                start++;
            }
            while(start < end && (*end & 0x1) == 0)
            {
                end--;
            }
            
            if(start < end)
            {
                int temp  = *start;
                *start    = *end;
                *end      = temp;
            }
        }

    }
};

完整代码见Github

上一篇 下一篇

猜你喜欢

热点阅读