码迷,mamicode.com
首页 > 编程语言 > 详细

奇偶数排序

时间:2017-06-22 00:18:37      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:name   color   algo   空间   end   algorithm   左移   void   int   

输入一个整数数组,对其重新排序,将奇数放在数组前面,偶数放在后面。要求时间复杂度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;
}

 

奇偶数排序

标签:name   color   algo   空间   end   algorithm   左移   void   int   

原文地址:http://www.cnblogs.com/wft1990/p/7062192.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!