美文网首页
面试题21:调整数组顺序使奇数位于偶数前面

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

作者: 潘雪雯 | 来源:发表于2020-05-12 14:40 被阅读0次

题目

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

解题思路

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

代码

  • 细节
    因为需要修改数组a中元素的位置,故采用指针类型。
    需要注意尾元素对应的指针表示形式
 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

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/pplbnhtx.html