绝对值排序



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
 

 

    吐槽一下,对内存卡的真死,必须要一维的一个数组才过。。。
AC:
选择排序
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int ans[101];
 6     int n;
 7     while(cin>>n&&n)
 8     {
 9         for(int i=1;i<=n;++i)
10         {
11             cin>>ans[i];
12         }
13         for(int i=1;i<n;++i)
14         {
15             int k=i;
16             for(int j=i+1;j<=n;++j)
17             {
18                 int a=abs(ans[j]),b=abs(ans[k]);
19                 if(a>b) k=j;
20             }
21             swap(ans[i],ans[k]);
22         }
23         cout<<ans[1];
24         for(int i=2;i<=n;++i)
25             cout<<" "<<ans[i];
26             cout<<endl;
27     }
28 }
View Code

下边的没过啊

桶排序:

 1 #include<bits/stdc++.h>
 2 #define LL long long
 3 using namespace std;
 4  int ans[101];
 5  bool res[101];
 6 int main()
 7 {
 8 
 9     int n;   int a;
10     while(cin>>n&&n)
11     {
12         memset(res,0,sizeof(res));
13         for(int i=1;i<=n;++i)
14         {
15 
16             cin>>a;
17             ans[abs(a)]=a;
18             res[abs(a)]=1;
19         }
20         bool r=true;
21         for(int i=100;i>=1;--i)
22         {
23             if(res[i]!=0) {if(r==true)cout<<ans[i];else cout<<" "<<ans[i];r=false;}
24         }
25         cout<<endl;
26     }
27 }
View Code

 

posted @ 2019-04-30 23:16  Auroras  阅读(294)  评论(0编辑  收藏  举报