zoukankan      html  css  js  c++  java
  • 剑指offer面试题14:调整数组位置使奇数位于偶数前面

    方法一为用于本题的方法,方法二为通用方法,即将数组分为两部分,两部分性质不相同。

    void Reorder(int *pData, unsigned int length, bool (*func)(int));
    bool isEven(int n);
    // ====================方法一====================
    void ReorderOddEven_1(int *pData, unsigned int length)
    {
        if(pData == NULL || length == 0)
            return;
        int *pBegin = pData;
        int *pEnd = pData + length - 1;
        while(pBegin < pEnd)
        {
            // 向后移动pBegin,直到它指向偶数
            while(pBegin < pEnd && (*pBegin & 0x1) != 0)
                pBegin ++;
            // 向前移动pEnd,直到它指向奇数
            while(pBegin < pEnd && (*pEnd & 0x1) == 0)
                pEnd --;
            if(pBegin < pEnd)
            {
                int temp = *pBegin;
                *pBegin = *pEnd;
                *pEnd = temp;
            }
        }
    }
    // ====================方法二====================
    void ReorderOddEven_2(int *pData, unsigned int length)
    {
        Reorder(pData, length, isEven);
    }
    void Reorder(int *pData, unsigned int length, bool (*func)(int))
    {
        if(pData == NULL || length == 0)
            return;
        int *pBegin = pData;
        int *pEnd = pData + length - 1;
        while(pBegin < pEnd) 
        {
            // 向后移动pBegin
            while(pBegin < pEnd && !func(*pBegin))
                pBegin ++;
            // 向前移动pEnd
            while(pBegin < pEnd && func(*pEnd))
                pEnd --;
            if(pBegin < pEnd)
            {
                int temp = *pBegin;
                *pBegin = *pEnd;
                *pEnd = temp;
            }
        }
    }
    bool isEven(int n)
    {
        return (n & 1) == 0;
    }
    
  • 相关阅读:
    发布全文检索类库外包
    给即将面试的人
    实验四 Web服务器2
    电子公文传输系统验收2功能测试
    整数范围与类型转换
    实验三电子公文传输系统1个人贡献
    socket测试
    电子公文传输系统验收4开发基础
    Web服务器1socket编程
    算法测试(课上测试)
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2797751.html
Copyright © 2011-2022 走看看