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