写一个程序;给一个数组,a【2 -2 3 3 6 -9 7】输出a【 -2 2 -9 3 3 6 7】
输入正负数都有数组,输出数组正负交替出现,多的那一类都放在后面
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n;cin>>n;vector<int> arr(n),ans(n);
for(int i=0;i<n;i++){cin>>arr[i];}
vector<int> zv; vector<int> fv;
for(int i=0;i<n;i++){
if(arr[i]<=0){fv.push_back(arr[i]);}
else{zv.push_back(arr[i]);}
}
sort(zv.begin(),zv.end());
sort(fv.begin(),fv.end());
reverse(fv.begin(),fv.end());
//正数多的情况 类似于合并两个有序数组
if(zv.size()>fv.size()){
int m=0,i=0,j=0;
for(;i<fv.size() && j<zv.size();){
ans[m++]=fv[i++];
ans[m++]=zv[j++];
}
while(j<zv.size()){ans[m++]=zv[j++];}
while(i<fv.size()){ans[m++]=fv[i++];}
}
for(int i=0;i<n;i++){
cout<<ans[i]<<" ";}
return 0;
}