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;
    }
    
  • 相关阅读:
    贪婪算法
    递归 快速排序
    递归 判断数组最大数字
    加法递归
    快速排序
    二分查找
    介绍求解AX=b:可解性与解的结构
    消元法求解线性方程组
    内容说明-线性代数
    gis
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2797751.html
Copyright © 2011-2022 走看看