题目:
调整数组数据使奇数全部在偶数前面
解法一:
void oddnumberfront1(int *arr,int length)
{
if (arr==NULL||length==0)
{
return;
}
int* first;
int* last;
first=arr;
last=arr+length-1;
while(first<last)
{
while(first<last&&(*first& 0x1)!=0)
{
first++;
}
while (first<last&&(*last& 0x1)==0)
{
last--;
}
if(first<last)
{
int tmp=*first;
*first=*last;
*last=tmp;
}
}
}
这种解法比较单一,只能解答这一种问题
解法二:将判断是否为偶数单独作为一个函数,这样要是限制条件改变后,只改变这个函数即可,下面添加了可被3整除的在后面,不被的在前面
#include<iostream>
#include<cstdlib>
using namespace std;
bool isEven(int n)//判断是否为偶数
{
return (n&1)==0;
}
bool is3multiplc(int n)//判断是否可以被3整除
{
return (n%3)==0;
}
void Reorder(int *arr,int length,bool(*func)(int))
{
if(arr==NULL||length==0)
return;
int * first=arr;
int * last=arr+length-1;
while(first<last)
{
while (first<last&&!isEven(*first))
{
first++;
}
while (first<last&&isEven(*last))
{
last--;
}
if(first<last)
{
int tmp=*first;
*first=*last;
*last=tmp;
}
}
}
void mulitplc(int *arr,int length,bool(*func)(int))
{
if(arr==NULL||length==0)
return;
int * first=arr;
int * last=arr+length-1;
while(first<last)
{
while (first<last&&!is3multiplc(*first))
{
first++;
}
while (first<last&&is3multiplc(*last))
{
last--;
}
if(first<last)
{
int tmp=*first;
*first=*last;
*last=tmp;
}
}
}
void ReorderOddEven(int * arr,int length)
{
Reorder(arr,length,isEven);
}
void muliptlc3front(int * arr,int length)
{
mulitplc(arr,length,isEven);
}
void printArr(int* arr,int length)
{
if(arr==NULL||length==0)
return;
for (int i=0;i<length;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
void test1()
{
int arr[]={1,2,3,4,5,6,7,8,9};
ReorderOddEven(arr,9);
printArr(arr,9);
}
void test2()
{
int arr1[]={1};
ReorderOddEven(arr1,1);
printArr(arr1,1);
}
void test3()
{
int* arr2=NULL;
ReorderOddEven(arr2,0);
printArr(arr2,0);
}
void test4()
{
int arr[]={1,2,3,4,5,6,7,8,9};
muliptlc3front(arr,9);
printArr(arr,9);
}
int main()
{
cout<<"test1:"<<endl;
test1();
cout<<"test2:"<<endl;
test2();
cout<<"test3:"<<endl;
test3();
cout<<"test4:"<<endl;
test4();
system("pause");
return 0;
}
结果