把数组A的奇数放在左边,偶数放在右边
这也是一道面试题,是不是easy到爆,但是渣渣我面试时一点算法状态都没有
这道题和上一篇博客里那道题的解法一模一样
# include <iostream> using namespace std; typedef int DataType; void InputArray(DataType*& array,int& l){ cout<<"输入数组长度:"; cin>>l; array=new DataType[l]; int i=0; while(i<l){ cin>>array[i++]; } }; void OutputArray(DataType* array,int l){ for(int i=0;i<l;i++){ cout<<array[i]<<"\t"; } cout<<endl; }; void InsertionSort(DataType*& array,int l,int d){ int key=0,j=0; if(d==1){ for(int i=1;i<l;i++){ j=i-1; key=array[i]; while(j>=0&&array[j]>key){ array[j+1]=array[j--]; } array[j+1]=key; } } else if(d==-1){ for(int i=1;i<l;i++){ j=i-1; key=array[i]; while(j>=0&&array[j]<key){ array[j+1]=array[j--]; } array[j+1]=key; } } }; void Find(DataType* array,int l,DataType t){ int i=0,j=l-1,sum=0; while(i<j){ sum=array[i]+array[j]; if(sum>t) j--; else if(sum<t) i++; else{ cout<<array[i]<<"+"<<array[j]<<"="<<t<<endl;i++;j--; } } }; void Merge(DataType*& array,int l){ int i=0,j=l-1; while(i<j){ if(array[i]%2==0&&array[j]%2==1){ int temp=array[i]; array[i]=array[j]; array[j]=temp; } else{ if(array[i]%2==1) i++; if(array[j]%2==0) j--; } } }; int main(){ DataType* array=NULL; int l=0,d=0; char conti='Y'; cout<<"--------开始-------"<<endl; while(conti=='Y'||conti=='y'){ InputArray(array,l); cout<<"请输入排序方式【顺序:1/逆序:-1】:"; cin>>d; InsertionSort(array,l,d); OutputArray(array,l); int t=0;cin>>t; Find(array,l,t); Merge(array,l); OutputArray(array,l); cout<<"输入新的待排序数组?【Y/N】:"; cin>>conti; } cout<<"---------结束--------"<<endl; OutputArray(array,l); return 0; }