題目: 調整數組數據使奇數全部在偶數前面 解法一:
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;}結果 
新聞熱點
疑難解答