美文网首页
面试题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