题目: 调整数组数据使奇数全部在偶数前面 解法一:
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;}结果
新闻热点
疑难解答