HDU-2020

绝对值排序

Problem Description
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。 
Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。 
 
Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
 
Sample Input
3 3 -4 2
4 0 1 2 -3
0
 
Sample Output
-4 3 2
-3 2 1 0
 
用一个数组存原数据,一个存绝对值,通过对绝对值数组的排序同时对原数组进行排序
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<math.h>
 4 #include<string.h>
 5 int main()
 6 {
 7     int n;
 8     int a[1000];
 9     int b[1000];
10     int i;
11     int t,j;
12     while (1)
13     {
14         scanf("%d",&n);
15         if (!n) break;
16         for (i=1;i<=n;i++)
17         {
18             scanf("%d",&a[i]);
19             b[i]=abs(a[i]);
20         }
21         for (i=1;i<n;i++)
22             for (j=i;j<=n;j++)
23             {
24                 if (b[i]<b[j])
25                 {
26                     t=a[i];
27                     a[i]=a[j];
28                     a[j]=t;
29                     t=b[i];
30                     b[i]=b[j];
31                     b[j]=t;
32                 }
33             }
34         for (i=1;i<n;i++) printf("%d ",a[i]);
35         printf("%d
",a[i]);
36     }
37     return 0;
38 }
原文地址:https://www.cnblogs.com/leiyuxiang/p/3493298.html