【小韦同学@神犇营-my1041-绝对值排序】
题目:
描述
给出n个数,有正有负,请按照它们的绝对值从小到大进行排序(绝对值一样的保持原有前后顺序)。
比如:
输入:
3
5 2 -5
输出:
2 5 -5
输入
第一行为一个正整数n(1<=n<=20000)
第二行n个整数,绝对值范围(0~1000000)
输出
输出排好序的n个数(每行8个数,最后一行可以不够8个数,行末不能有空格)
输入样例1
18
5 4 2 1 3 9 8 7 6 10 11 -18 -16 -17 13 14 12 15
输出样例1
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 -16
-17 -18
题解:
/*********************************************************************
* 题目:神犇营-my1041-绝对值排序
* 作者:小韦同学
* 邮箱:weichangying_wcy@163.com
* 题解:
思路:
可以用冒泡排序,只是在比较元素的时候是用绝对值比较。
注意:
1°输出要8个元素一行,并且行末不能有多余的空格。
2°注意是稳定排序。
*********************************************************************/
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int num[n];
for (int i = 0; i < n; i++) {
cin >> num[i];
}
for (int i = 0; i < n - 1; i++) {
bool swapped = false;
for (int j = 0; j < n - i - 1; j++) {
if (abs(num[j]) > abs(num[j + 1])) {
swap(num[j], num[j + 1]);
swapped = true;
}
}
if (swapped == false) {
break;
}
}
for (int i = 0; i < n; i++) {
cout << num[i];
if ((i + 1) % 8 != 0) cout << " ";
else cout << endl;
}
return 0;
}
我是小韦同学,企者不立,跨者不行,每天进步一点点。
欢迎大家多多交流,如果发现有错误,请多指正。有疑问的同学也可以留言评论或者发邮件。
邮箱:weichangying_wcy@163.com