奇偶数排序

输入一个整数数组,对其重新排序,将奇数放在数组前面,偶数放在后面。要求时间复杂度O(n), 空间复杂度O(1)。

解法一:一头一尾指针往中间扫描

#include <iostream>
#include <algorithm>
using namespace std;
//判断是否为奇数
bool isOddNum(int num)
{
    return (num&1)==1;
}
//奇数和偶数互换
void OddEvenSort(int *pData,int len)
{
    if(pData==NULL||len<=0)
        return;
    int *pbegin=pData;
    int *pend=pData+len-1;
    while(pbegin<pend)
    {
        //如果pbegin指针指向的是奇数,正常,向右移
        if(isOddNum(*pbegin))
            pbegin++;
        //如果pend指针指向的是偶数,正常,向左移
        else if(!isOddNum(*pend))
            pend--;
        else{
        //否则都不正常,交换
            swap(*pbegin,*pend);
        }
    }
}
void print(int a[],int len)
{
    for(int i=0;i<len;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}
int main()
{
    int a[]={2,56,12,4,9,6,3,9,56,235,77,56};
    int len=sizeof(a)/sizeof(int);
    print(a,len);
    OddEvenSort(a,len);
    print(a,len);
    return 0;
}
原文地址:https://www.cnblogs.com/wft1990/p/7062192.html