思路是开了两个数组,一个保存绝对值,一个保存符号位,排序的时候一起调换,输出的时候再把符号位乘回去就完了
偷懒用了冒泡排序法
#include <stdio.h>
#include <iostream>
using namespace std;
void switchA(int num[100],int sign[100],int a,int b)
{
int tmp;
tmp = num[a];
num[a] = num[b];
num[b] = tmp;
tmp = sign[a];
sign[a] = sign[b];
sign[b] = tmp;
}
void sortArr(int num[100],int sign[100],int n)
{
for(int i = 0; i < n; i++)
{
for(int j = n-1; j > i; j--)
{
if(num[j] > num [j-1])
switchA(num,sign,j,j-1);
}
}
}
void main()
{
int n;
while(cin>>n && n!= 0)
{
int num[100];
int sign[100];
for(int i=0;i<n;i++)
cin>>num[i];
//全部改为正数并且记录符号位
for(int i=0;i<n;i++)
{
if(num[i]<0)
{
sign[i] = -1;
num[i] = -1*num[i];
}
else
sign[i] = 1;
}
sortArr(num,sign,n);
for(int i=0;i<n-1;i++)
{
printf("%d ",num[i]*sign[i]);
}
printf("%d\n",num[n-1]*sign[n-1]);
}
}