绝对值排序 | ||
|
问题描述
给你 个数,现在让你按照他们绝对值进行从小到大进行排序,若绝对值相同,负的在前,正的在后
输入格式
第一行输入一个整数 ,代表有 个数。接下来输入 个整数
输出格式
对于每对于每一组测试数据,输出排序好的 个数,中间用空格分开。
样例输入
6
-1 1 2 3 4 5
样例输出
-1 1 2 3 4 5
1.将正负数分开排序
2.先负再正
3.把剩余的数直接输出即可(因为已经排过序了)
#include<bits/stdc++.h>
using namespace std;
int a[1000001];
int x[1000001],y[1000001];
int xy,yx;
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]<0){
x[xy]=abs(a[i]);
xy++;
}else{
y[yx]=a[i];
yx++;
}
}
sort(x,x+xy);
sort(y,y+yx);
int i=0;
int j=0;
while(i<xy&&j<yx){
if(x[i]<=abs(y[j])){
cout<<-(x[i])<<" ";
i++;
}else{
cout<<y[j]<<" ";
j++;
}
}
while(i<xy){
cout<<-(x[i])<<" ";
i++;
}
while(j<yx){
cout<<y[j]<<" ";
j++;
}
}