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 }
下边的没过啊
桶排序:
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 }